Home > m > timetools > statespacefunctions > utp_ltpda_ss_assemble_1.m

utp_ltpda_ss_assemble_1

PURPOSE ^

test function for utp_ltpda_ss_assemble using 3 subsystems, random dims.

SYNOPSIS ^

function varargout = utp_ltpda_ss_assemble_1(varargin)

DESCRIPTION ^

 test function for utp_ltpda_ss_assemble using 3 subsystems, random dims.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 DESCRIPTION: test function for ltpda_ss_assemble, numerical check because
 the random systems are assembled the same way all the time

 CALL: utp_ltpda_ss_assemble_1

 INPUTS: 
 
 OUTPUTS: 1/0
 
 ***** THERE ARE NO DEFAULT PARAMETERS *****

 VERSION: $Id: utp_ltpda_ss_assemble_1.m,v 1.4 2008/03/11 16:52:56 adrien Exp $

 HISTORY: 08-02-2008 A Grynagier
 24-01-2008 A Grynagier
 Creation 16-01-2008 A Grynagier

 TO DO Nothing
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function varargout = utp_ltpda_ss_assemble_1(varargin)
0002 % test function for utp_ltpda_ss_assemble using 3 subsystems, random dims.
0003 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0004 %
0005 % DESCRIPTION: test function for ltpda_ss_assemble, numerical check because
0006 % the random systems are assembled the same way all the time
0007 %
0008 % CALL: utp_ltpda_ss_assemble_1
0009 %
0010 % INPUTS:
0011 %
0012 % OUTPUTS: 1/0
0013 %
0014 % ***** THERE ARE NO DEFAULT PARAMETERS *****
0015 %
0016 % VERSION: $Id: utp_ltpda_ss_assemble_1.m,v 1.4 2008/03/11 16:52:56 adrien Exp $
0017 %
0018 % HISTORY: 08-02-2008 A Grynagier
0019 % 24-01-2008 A Grynagier
0020 % Creation 16-01-2008 A Grynagier
0021 %
0022 % TO DO Nothing
0023 %
0024 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0025 
0026 ALGONAME = mfilename;
0027 VERSION =  '$Id: utp_ltpda_ss_assemble_1.m,v 1.4 2008/03/11 16:52:56 adrien Exp $';
0028 CATEGORY = 'STATESPACE';
0029 display(['starting ' ALGONAME]);
0030 
0031 if not(isempty(varargin))
0032     if isequal( varargin{1}, 'Version')
0033         varargout = VERSION;
0034         return;
0035     elseif isequal(varargin{1}, 'Params')
0036         varargout = plist();
0037         return;
0038     elseif isequal(varargin{1}, 'Category')
0039         varargout = CATEGORY;
0040         return;
0041     end
0042 end
0043 
0044 output = 1;
0045 for count=1:100
0046 %% random size for the state spaces, inputs & outputs
0047     ss1 = floor(5*rand(1));
0048     ss2 = floor(5*rand(1));
0049     ss3 = floor(5*rand(1));
0050     out1 = floor(5*rand(1));
0051     out2 = floor(5*rand(1));
0052     out3 = floor(5*rand(1));
0053     in1 = floor(5*rand(1));
0054     in2 = floor(5*rand(1));
0055 
0056 %% random matrices
0057     A1 = rand(ss1,ss1);
0058     B1 = rand(ss1,in1);
0059     C1 = rand(out1,ss1);
0060     D1 = rand(out1,in1);
0061     A2 = rand(ss2,ss2);
0062     B2 = rand(ss2,in2);
0063     C2 = rand(out2,ss2);
0064     D2 = rand(out2,in2);
0065     A3 = rand(ss3,ss3);
0066     B3 = rand(ss3,out1);
0067     C3 = rand(out3,ss3);
0068     D3 = rand(out3,out1);
0069     E3 = rand(ss3,out2);
0070     F3 = rand(out3,out2);
0071     o3 = eye(out3);
0072     A_meta = {A1,[],[];[],A2,[];[],[],A3};
0073     B_meta = {[],[],[];[],[],[];B3,E3,[]};
0074     C_meta = {C1,[],[];[],C2,[];[],[],C3};
0075     D_meta = {[],[],[];[],[],[];D3,F3,[]};
0076     Bext_meta = {B1,[];[],B2;[],[]};
0077     Dext_meta = {D1,[];[],D2;[],[]};
0078     Ox_meta = {[],[],[]};
0079     Oy_meta = {[],[],o3};
0080     
0081 %% local subsystems and call
0082     subsyst1 = plist('TYPE', 'SUBSYSTEM' ,'NAME', 'Y1' ,'TIMESTEP', 0 , ...
0083     'XISOUTPUT',0,'YISOUTPUT',0,'XINI', zeros(ss1,1) , ...
0084     'PARAMNAMES', {'p1' 'p2' 'p3'} ,'PARAMVALUES', [1 2 3] ,'PARAMSIGMAS', [2 5 3] ,...
0085     'NBINPUTS', 1 ,'INPUTNAMES', {'I1'} ,'INPUTSIZES', in1 , 'INPUTISUSED', 1 ,...
0086     'AMAT', {A1} ,'BMATS', {B1} ,'CMAT', {C1} ,'DMATS', {D1} );
0087     subsyst2 = plist('TYPE', 'SUBSYSTEM' ,'NAME', 'Y2' ,'TIMESTEP', 0 , ...
0088     'XISOUTPUT',0,'YISOUTPUT',0,'XINI', zeros(ss2,1) , ...
0089     'PARAMNAMES', {'p1'} ,'PARAMVALUES', 1 ,'PARAMSIGMAS', 2 ,...
0090     'NBINPUTS', 1 ,'INPUTNAMES', {'I2'} ,'INPUTSIZES', in2 , 'INPUTISUSED', 1 ,...
0091     'AMAT', {A2} ,'BMATS', {B2} ,'CMAT', {C2} ,'DMATS', {D2} );
0092     subsyst3 = plist('TYPE', 'SUBSYSTEM' ,'NAME', 'Y3' ,'TIMESTEP', 0 , ...
0093     'XISOUTPUT',0,'YISOUTPUT',1,'XINI', zeros(ss3,1) , ...
0094     'PARAMNAMES', {'p4' 'p2' 'p1'} ,'PARAMVALUES', [4 2 1] ,'PARAMSIGMAS', [4 5 2] ,...
0095     'NBINPUTS', 2 ,'INPUTNAMES', {'Y1'; 'Y2'} ,'INPUTSIZES', [out1 out2] , 'INPUTISUSED', [1 1] ,...
0096     'AMAT', {A3} ,'BMATS', {B3; E3} ,'CMAT', {C3} ,'DMATS', {D3; F3} );
0097     ltpda_ss_check(subsyst1);
0098     ltpda_ss_check(subsyst2);
0099     ltpda_ss_check(subsyst3);
0100     
0101 %% meta system and fusionned matrices automatic generation
0102     listSubsystems = plist('Y1',subsyst1,'Y2',subsyst2,'Y3',subsyst3);
0103     listMeta = ltpda_ss_assemble_arrange(listSubsystems);
0104     [Subsys] = ltpda_ss_assemble_fusion(listMeta);
0105     [Subsys_2] = ltpda_ss_assemble([listSubsystems, listSubsystems]);
0106     if not(isequal(Subsys_2(2).params(14).val, Subsys.params(14).val)) %checking A matrices are identical
0107         output = 0;
0108     end
0109     A_mat = find(Subsys, 'AMAT');
0110     B_mats = find(Subsys, 'BMATS');
0111     C_mat = find(Subsys, 'CMAT');
0112     D_mats = find(Subsys, 'DMATS');
0113      
0114 %% meta system and fusionned matrices by hand
0115     Xini_meta = {zeros(ss1,1) zeros(ss2,1) zeros(ss3,1)};
0116     SubsystemNames = {'Y1' 'Y2' 'Y3'};
0117     ParamNames_meta = {{'p1' 'p2' 'p3'} {'p1'} {'p4' 'p2' 'p1'}};
0118     ParamValues_meta = {[1 2 3] 1 [4 2 1]};
0119     ParamSigmas_meta = {[2 5 3] 2 [4 5 2]};
0120     NbInputs_meta = 2;
0121     InputNames_meta = {'I1' ;'I2'};
0122     InputSizes_meta = [in1 in2] ;
0123     IsUsed_meta =  [1 1];
0124 
0125     A_mat0 = [A1              zeros(ss1,ss2)  zeros(ss1,ss3); ...
0126         zeros(ss2,ss1)  A2              zeros(ss2,ss3); ...
0127         zeros(ss3,ss1)  zeros(ss3,ss2)  A3            ];
0128     B_mat0 = [zeros(ss1,out1)  zeros(ss1,out2)  zeros(ss1,out3); ...
0129         zeros(ss2,out1)  zeros(ss2,out2)  zeros(ss2,out3); ...
0130         B3               E3               zeros(ss3,out3)  ];
0131     C_mat0 = [C1               zeros(out1,ss2)  zeros(out1,ss3); ...
0132         zeros(out2,ss1)  C2               zeros(out2,ss3); ...
0133         zeros(out3,ss1)  zeros(out3,ss2)  C3          ];
0134     D_mat0 = [zeros(out1,out1) zeros(out1,out2) zeros(out1,out3); ...
0135         zeros(out2,out1) zeros(out2,out2) zeros(out2,out3); ...
0136         D3               F3               zeros(out3,out3)  ];
0137     Bext_mats0 = cell(1,2);
0138     Dext_mats0 = cell(1,2);
0139     Bext_mats0{1} = [ B1               ; zeros(ss2,in1)  ; zeros(ss3,in1)   ];
0140     Bext_mats0{2} = [ zeros(ss1,in2)   ; B2              ; zeros(ss3,in2)   ];
0141     Dext_mats0{1} = [D1                ; zeros(out2,in1) ; zeros(out3,in1)  ];
0142     Dext_mats0{2} = [ zeros(out1,in2)  ; D2              ; zeros(out3,in2)  ];
0143     Ox_mat0 = [zeros(out3,ss1) zeros(out3,ss2) zeros(out3,ss3)];
0144     Oy_mat0 = [zeros(out3,out1) zeros(out3,out2) o3];
0145     %take minimal system
0146     IDinv = inv(eye(size(D_mat0,1)) - D_mat0);
0147     A0 = A_mat0 + B_mat0*IDinv*C_mat0;
0148     C0 = Ox_mat0 + Oy_mat0*IDinv*C_mat0;
0149     BMATS0 = cell(2,1);
0150     DMATS0 = cell(2,1);
0151     for j_meta = 1:2
0152         BMATS0{j_meta} = Bext_mats0{j_meta} + B_mat0*IDinv*Dext_mats0{j_meta};
0153         DMATS0{j_meta} = Oy_mat0*IDinv*Dext_mats0{j_meta};
0154     end
0155     %retriveing fields out of plist
0156     % parsing the meta matrices into a list
0157     listMeta0 = plist('A_META', A_meta, 'BEXT_META', Bext_meta, 'C_META', C_meta, 'DEXT_META', Dext_meta, 'D_META', D_meta, 'B_META', B_meta, ...
0158         'OY_META', Oy_meta, 'OX_META', Ox_meta,...
0159         'TIMESTEP', 0, 'XINI_META', Xini_meta, 'NAMES_META', SubsystemNames,...
0160         'PARAMNAMES_META', ParamNames_meta ,'PARAMVALUES_META', ParamValues_meta ,'PARAMSIGMAS_META', ParamSigmas_meta ,...
0161         'NBINPUTS_META', NbInputs_meta ,'INPUTNAMES_META', InputNames_meta ,'INPUTSIZES_META', InputSizes_meta , 'INPUTISUSED_META', IsUsed_meta); %#ok<NASGU>
0162 
0163 %% comparison between two results
0164     sumNorms =  norm(B_mats{1} - BMATS0{1}) + norm(B_mats{2} - BMATS0{2})  + norm(D_mats{1} - DMATS0{1})  + norm(D_mats{2} - DMATS0{2}) ...
0165         + norm(A_mat{1} - A0) + norm(C_mat{1} - C0);
0166 
0167     if not( isequal(0, sumNorms))
0168         display('erreur')
0169         output = 0;
0170     else
0171         display('OK')
0172        
0173     end
0174     
0175     display(count)
0176 end
0177 varargout = {output};
0178 end

Generated on Mon 31-Mar-2008 13:54:54 by m2html © 2003