0001 function output = utp_ltpda_ss_assemble_1
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.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
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
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
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
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
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
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
0137
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
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