0001 function varargout = utp_ltpda_ss_assemble_1(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026 ALGONAME = mfilename;
0027 VERSION = '$Id: utp_ltpda_ss_assemble_1.html,v 1.4 2008/03/31 10:27:36 hewitson 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
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
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
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
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))
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
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
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
0156
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);
0162
0163
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