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 output = utp_ltpda_ss_assemble_1

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.2 2008/02/20 09:20:07 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 output = utp_ltpda_ss_assemble_1
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.2 2008/02/20 09:20:07 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.2 2008/02/20 09:20:07 adrien Exp $';
0028 display(['starting ' mfilename]);
0029 
0030 output = 1;
0031 clear
0032 for count=1:100
0033 %% random size for the state spaces, inputs & outputs
0034     ss1 = floor(5*rand(1));
0035     ss2 = floor(5*rand(1));
0036     ss3 = floor(5*rand(1));
0037     out1 = floor(5*rand(1));
0038     out2 = floor(5*rand(1));
0039     out3 = floor(5*rand(1));
0040     in1 = floor(5*rand(1));
0041     in2 = floor(5*rand(1));
0042 
0043 %% random matrices
0044     A1 = rand(ss1,ss1);
0045     B1 = rand(ss1,in1);
0046     C1 = rand(out1,ss1);
0047     D1 = rand(out1,in1);
0048     A2 = rand(ss2,ss2);
0049     B2 = rand(ss2,in2);
0050     C2 = rand(out2,ss2);
0051     D2 = rand(out2,in2);
0052     A3 = rand(ss3,ss3);
0053     B3 = rand(ss3,out1);
0054     C3 = rand(out3,ss3);
0055     D3 = rand(out3,out1);
0056     E3 = rand(ss3,out2);
0057     F3 = rand(out3,out2);
0058     o3 = eye(out3);
0059     A_meta = {A1,[],[];[],A2,[];[],[],A3};
0060     B_meta = {[],[],[];[],[],[];B3,E3,[]};
0061     C_meta = {C1,[],[];[],C2,[];[],[],C3};
0062     D_meta = {[],[],[];[],[],[];D3,F3,[]};
0063     Bext_meta = {B1,[];[],B2;[],[]};
0064     Dext_meta = {D1,[];[],D2;[],[]};
0065     Ox_meta = {[],[],[]};
0066     Oy_meta = {[],[],o3};
0067     
0068 %% local subsystems and call
0069     subsyst1 = plist('TYPE', 'SUBSYSTEM' ,'NAME', 'Y1' ,'TIMESTEP', 0 , ...
0070     'XISOUTPUT',0,'YISOUTPUT',0,'XINI', zeros(ss1,1) , ...
0071     'PARAMNAMES', {'p1' 'p2' 'p3'} ,'PARAMVALUES', [1 2 3] ,'PARAMSIGMAS', [2 5 3] ,...
0072     'NBINPUTS', 1 ,'INPUTNAMES', {'I1'} ,'INPUTSIZES', in1 , 'INPUTISUSED', 1 ,...
0073     'AMAT', {A1} ,'BMATS', {B1} ,'CMAT', {C1} ,'DMATS', {D1} );
0074     subsyst2 = plist('TYPE', 'SUBSYSTEM' ,'NAME', 'Y2' ,'TIMESTEP', 0 , ...
0075     'XISOUTPUT',0,'YISOUTPUT',0,'XINI', zeros(ss2,1) , ...
0076     'PARAMNAMES', {'p1'} ,'PARAMVALUES', [1] ,'PARAMSIGMAS', [2] ,...
0077     'NBINPUTS', 1 ,'INPUTNAMES', {'I2'} ,'INPUTSIZES', in2 , 'INPUTISUSED', 1 ,...
0078     'AMAT', {A2} ,'BMATS', {B2} ,'CMAT', {C2} ,'DMATS', {D2} );
0079     subsyst3 = plist('TYPE', 'SUBSYSTEM' ,'NAME', 'Y3' ,'TIMESTEP', 0 , ...
0080     'XISOUTPUT',0,'YISOUTPUT',1,'XINI', zeros(ss3,1) , ...
0081     'PARAMNAMES', {'p4' 'p2' 'p1'} ,'PARAMVALUES', [4 2 1] ,'PARAMSIGMAS', [4 5 2] ,...
0082     'NBINPUTS', 2 ,'INPUTNAMES', {'Y1'; 'Y2'} ,'INPUTSIZES', [out1 out2] , 'INPUTISUSED', [1 1] ,...
0083     'AMAT', {A3} ,'BMATS', {B3; E3} ,'CMAT', {C3} ,'DMATS', {D3; F3} );
0084     ltpda_ss_check(subsyst1);
0085     ltpda_ss_check(subsyst2);
0086     ltpda_ss_check(subsyst3);
0087     
0088 %% meta system and fusionned matrices automatic generation
0089     listSubsystems = plist('Y1',subsyst1,'Y2',subsyst2,'Y3',subsyst3);
0090     listMeta = ltpda_ss_assemble_arrange(listSubsystems);
0091     [Subsys] = ltpda_ss_assemble_fusion(listMeta);
0092     A_mat = find(Subsys, 'AMAT');
0093     B_mats = find(Subsys, 'BMATS');
0094     C_mat = find(Subsys, 'CMAT');
0095     D_mats = find(Subsys, 'DMATS');
0096      
0097 %% meta system and fusionned matrices by hand
0098     Xini_meta = {zeros(ss1,1) zeros(ss2,1) zeros(ss3,1)};
0099     SubsystemNames = {'Y1' 'Y2' 'Y3'};
0100     ParamNames_meta = {{'p1' 'p2' 'p3'} {'p1'} {'p4' 'p2' 'p1'}};
0101     ParamValues_meta = {[1 2 3] [1] [4 2 1]};
0102     ParamSigmas_meta = {[2 5 3] [2] [4 5 2]};
0103     NbInputs_meta = 2;
0104     InputNames_meta = {'I1' ;'I2'};
0105     InputSizes_meta = [in1 in2] ;
0106     IsUsed_meta =  [1 1];
0107 
0108     A_mat0 = [A1              zeros(ss1,ss2)  zeros(ss1,ss3); ...
0109         zeros(ss2,ss1)  A2              zeros(ss2,ss3); ...
0110         zeros(ss3,ss1)  zeros(ss3,ss2)  A3            ];
0111     B_mat0 = [zeros(ss1,out1)  zeros(ss1,out2)  zeros(ss1,out3); ...
0112         zeros(ss2,out1)  zeros(ss2,out2)  zeros(ss2,out3); ...
0113         B3               E3               zeros(ss3,out3)  ];
0114     C_mat0 = [C1               zeros(out1,ss2)  zeros(out1,ss3); ...
0115         zeros(out2,ss1)  C2               zeros(out2,ss3); ...
0116         zeros(out3,ss1)  zeros(out3,ss2)  C3          ];
0117     D_mat0 = [zeros(out1,out1) zeros(out1,out2) zeros(out1,out3); ...
0118         zeros(out2,out1) zeros(out2,out2) zeros(out2,out3); ...
0119         D3               F3               zeros(out3,out3)  ];
0120     Bext_mats0{1} = [ B1               ; zeros(ss2,in1)  ; zeros(ss3,in1)   ];
0121     Bext_mats0{2} = [ zeros(ss1,in2)   ; B2              ; zeros(ss3,in2)   ];
0122     Dext_mats0{1} = [D1                ; zeros(out2,in1) ; zeros(out3,in1)  ];
0123     Dext_mats0{2} = [ zeros(out1,in2)  ; D2              ; zeros(out3,in2)  ];
0124     Ox_mat0 = [zeros(out3,ss1) zeros(out3,ss2) zeros(out3,ss3)];
0125     Oy_mat0 = [zeros(out3,out1) zeros(out3,out2) o3];
0126     %take minimal system
0127     IDinv = inv(eye(size(D_mat0,1)) - D_mat0);
0128     A0 = A_mat0 + B_mat0*IDinv*C_mat0;
0129     C0 = Ox_mat0 + Oy_mat0*IDinv*C_mat0;
0130     BMATS0 = cell(2,1);
0131     DMATS0 = cell(2,1);
0132     for j_meta = 1:2
0133         BMATS0{j_meta} = Bext_mats0{j_meta} + B_mat0*IDinv*Dext_mats0{j_meta};
0134         DMATS0{j_meta} = Oy_mat0*IDinv*Dext_mats0{j_meta};
0135     end
0136     %retriveing fields out of plist
0137     % parsing the meta matrices into a list
0138     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, ...
0139         'OY_META', Oy_meta, 'OX_META', Ox_meta,...
0140         'TIMESTEP', 0, 'XINI_META', Xini_meta, 'NAMES_META', SubsystemNames,...
0141         'PARAMNAMES_META', ParamNames_meta ,'PARAMVALUES_META', ParamValues_meta ,'PARAMSIGMAS_META', ParamSigmas_meta ,...
0142         'NBINPUTS_META', NbInputs_meta ,'INPUTNAMES_META', InputNames_meta ,'INPUTSIZES_META', InputSizes_meta , 'INPUTISUSED_META', IsUsed_meta);
0143 
0144 %% comparison between two results
0145     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}) ...
0146         + norm(A_mat{1} - A0) + norm(C_mat{1} - C0);
0147 
0148     if not( isequal(0, sumNorms))
0149         display('erreur')
0150         output = 0;
0151     else
0152         display('OK')
0153        
0154     end
0155     display(count)
0156 end
0157 end

Generated on Tue 26-Feb-2008 10:52:52 by m2html © 2003