Contents

Example 24: Identification with tensor nuclear norms

based on the paper of B. Gunes, JW. van Wingerden and M. Verhaegen 2016
"A tensor perspective on LPV subspace identification"
clear; close all; clc;  %start clean

Simulation settings

sim_case = 'Case1';     %Case1 or Case2
                        %Case1: n = 2, m = 2
                        %Case2: n = 4, m = 4
scheduling_option = 20; %higher value means more scheduling 'excitation'
SNR = 0.8;              %Signal to Noise ratio
N = 100;                %number of data points
seed = 1;               %Matlab random number generator seed

Estimator settings

% all method settings
past_window             = 4;        % natural number
                                    % different methods may require
                                    % different windows for best results

% proposed method settings
regularization_window   = 2;        % natural number, increases time cost
lambda                  = 0.2;      % any scalar

% state-of-the-art method settings
pbreg                   = 'tikh';   % Tikhonov regularization, see lordvarx.m
pbregopt                = 'gcv';    % Generalized Cross Validation, see lordvarx.m

Generate data

% generate data
[NZ, mymu, mymu_val, M, t, u, u_val, y, Y, inputs, m, n, outputs] ...
= generate_data_ex24(sim_case, seed, N, past_window ,SNR, scheduling_option, 0);

% noise-free outputs for determining Variance Accounted For
yu = sim(M,u',t,mymu(:,2:size(mymu,2)));
yuv = sim(M,u_val',t,mymu_val(:,2:size(mymu_val,2)));

Run state-of-the-art method and present Variance Accounted For

% Obtain an estimate of the LPV system
[~,X_pb] = lordvarx(u,y,mymu,past_window,past_window,pbreg,pbregopt,[0 0 0],1);
X_pb = lmodx(X_pb,n);
[A_pb,B_pb,C_pb,K_pb] = lx2abck(X_pb,u,y,mymu,past_window,past_window,[0 0 0]);
M_pb = idafflpv(A_pb,B_pb,C_pb,zeros(outputs,m*inputs),K_pb,zeros(n,1),1);

% Generate outputs
y_pb = sim(M_pb,u',t,mymu(:,2:size(mymu,2)));
y_pb_val = sim(M_pb,u_val',t,mymu_val(:,2:size(mymu_val,2)));

% Calculate Variance Accounted For
identification_vaf_pbr = vaf(yu,y_pb)
validation_vaf_pbr = vaf(yuv,y_pb_val)
identification_vaf_pbr =

   81.4334


validation_vaf_pbr =

   76.1554

Run proposed method and present Variance Accounted For

% Obtain an estimate of the LPV system
M_tnn = ex24algorithm(u,y,mymu,m,n,past_window,past_window,inputs,outputs,lambda,NZ,Y,regularization_window);

% Generate outputs
y_tnn = sim(M_tnn,u',1:max(size(u)),mymu(:,2:size(mymu,2)));
y_tnn_val = sim(M_tnn,u_val',1:max(size(u_val)),mymu_val(:,2:size(mymu_val,2)));

% Calculate Variance Accounted For
identification_vaf_tnn = vaf(yu,y_tnn)
validation_vaf_tnn = vaf(yuv,y_tnn_val)
identification_vaf_tnn =

   88.9602


validation_vaf_tnn =

   86.4356