0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 function varargout = validate(varargin)
0019
0020 utils.helper.msg(utils.const.msg.MNAME, ['running ', mfilename]);
0021
0022 sys = varargin{1};
0023
0024
0025 for i_sys = 1:length(sys)
0026
0027
0028
0029
0030
0031
0032
0033 sys(i_sys).Ninputs = size(sys(i_sys).bmats, 2);
0034 sys(i_sys).Nss = size(sys(i_sys).amats, 2);
0035 sys(i_sys).Noutputs = size(sys(i_sys).cmats, 1);
0036 sys(i_sys).Nparams = length(sys(i_sys).paramnames);
0037
0038 if isempty(sys(i_sys).inputsizes)
0039 sys(i_sys).inputsizes = - ones(1,sys(i_sys).Ninputs);
0040
0041 for i=1:sys(i_sys).Ninputs
0042 for j=1:sys(i_sys).Nss
0043 if ~isequal(sys(i_sys).bmats{j,i}, [])
0044 sys(i_sys).inputsizes(i) = size(sys(i_sys).bmats{j,i},2);
0045 break
0046 end
0047 end
0048 for j=1:sys(i_sys).Noutputs
0049 if ~isequal(sys(i_sys).dmats{j,i}, [])
0050 sys(i_sys).inputsizes(i) = size(sys(i_sys).dmats{j,i},2);
0051 break
0052 end
0053 end
0054 end
0055 end
0056
0057 if isempty(sys(i_sys).sssizes)
0058 sys(i_sys).sssizes = - ones(1,sys(i_sys).Nss);
0059
0060 for i=1:sys(i_sys).Nss
0061 sys(i_sys).sssizes(i) = size(sys(i_sys).amats{i,i},2);
0062 end
0063 end
0064
0065 if isempty(sys(i_sys).outputsizes)
0066 sys(i_sys).outputsizes = - ones(1,sys(i_sys).Noutputs);
0067
0068 for i=1:sys(i_sys).Noutputs
0069 for j=1:sys(i_sys).Nss
0070 if ~isequal(sys(i_sys).cmats{i,j}, [])
0071 sys(i_sys).outputsizes(i) = size(sys(i_sys).cmats{i,j},1);
0072 break
0073 end
0074 end
0075 for j=1:sys(i_sys).Ninputs
0076 if ~isequal(sys(i_sys).dmats{i,j}, [])
0077 sys(i_sys).outputsizes(i) = size(sys(i_sys).dmats{i,j},1);
0078 break
0079 end
0080 end
0081 end
0082 end
0083
0084
0085
0086
0087
0088 if isempty(sys(i_sys).mmats)
0089 sys(i_sys).mmats = cell(sys(i_sys).Nss,sys(i_sys).Nss);
0090 for i=1:sys(i_sys).Nss
0091 sys(i_sys).mmats{i,i} = eye(sys(i_sys).sssizes(i));
0092 end
0093 end
0094
0095 sys(i_sys).isnumerical = true;
0096 for i=1:length(sys(i_sys).amats)
0097 if ~isreal(sys(i_sys).amats{i})
0098 sys(i_sys).isnumerical = false;
0099 end
0100 end
0101 if sys(i_sys).isnumerical
0102 for i=1:length(sys(i_sys).bmats)
0103 if ~isreal(sys(i_sys).bmats{i})
0104 sys(i_sys).isnumerical = false;
0105 end
0106 end
0107 end
0108 if sys(i_sys).isnumerical
0109 for i=1:length(sys(i_sys).cmats)
0110 if ~isreal(sys(i_sys).cmats{i})
0111 sys(i_sys).isnumerical = false;
0112 end
0113 end
0114 end
0115 if sys(i_sys).isnumerical
0116 for i=1:length(sys(i_sys).dmats)
0117 if ~isreal(sys(i_sys).dmats{i})
0118 sys(i_sys).isnumerical = false;
0119 end
0120 end
0121 end
0122 if sys(i_sys).isnumerical
0123 for i=1:length(sys(i_sys).mmats)
0124 if ~isreal(sys(i_sys).mmats{i})
0125 sys(i_sys).isnumerical = false;
0126 end
0127 end
0128 end
0129
0130
0131
0132 if isempty(sys(i_sys).amats_handles)
0133 sys(i_sys).amats_handles = cell(sys(i_sys).Nss,sys(i_sys).Nss);
0134 end
0135
0136 if isempty(sys(i_sys).bmats_handles)
0137 sys(i_sys).bmats_handles =cell(sys(i_sys).Nss,sys(i_sys).Ninputs);
0138 end
0139
0140 if isempty(sys(i_sys).cmats_handles)
0141 sys(i_sys).cmats_handles = cell(sys(i_sys).Noutputs,sys(i_sys).Nss);
0142 end
0143
0144 if isempty(sys(i_sys).dmats_handles)
0145 sys(i_sys).dmats_handles = cell(sys(i_sys).Noutputs,sys(i_sys).Ninputs);
0146 end
0147
0148
0149
0150 if isempty(sys(i_sys).inputnames)
0151 sys(i_sys).inputnames = cell(1,sys(i_sys).Ninputs);
0152 for i=1:sys(i_sys).Ninputs
0153 sys(i_sys).inputnames{i} = ['input ',num2str(i)];
0154 end
0155 end
0156
0157 if isempty(sys(i_sys).inputvarnames)
0158 sys(i_sys).inputvarnames = cell(1,sys(i_sys).Ninputs);
0159 for i=1:sys(i_sys).Ninputs
0160 sys(i_sys).inputvarnames{i} = cell(1,sys(i_sys).inputsizes(i));
0161 for j=1:sys(i_sys).inputsizes(i)
0162 sys(i_sys).inputvarnames{i}{j} = [sys(i_sys).inputnames{i},'>' num2str(j)];
0163 end
0164 end
0165 end
0166
0167
0168
0169 if isempty(sys(i_sys).ssnames)
0170 sys(i_sys).ssnames = cell(1,sys(i_sys).Nss);
0171 for i=1:sys(i_sys).Nss
0172 sys(i_sys).ssnames{i} = ['state ',num2str(i)];
0173 end
0174 end
0175
0176 if isempty(sys(i_sys).ssvarnames)
0177 sys(i_sys).ssvarnames = cell(1,sys(i_sys).Nss);
0178 for i=1:sys(i_sys).Nss
0179 sys(i_sys).ssvarnames{i} = cell(1,sys(i_sys).sssizes(i));
0180 for j=1:sys(i_sys).sssizes(i)
0181 sys(i_sys).ssvarnames{i}{j} = [sys(i_sys).ssnames{i},'>' num2str(j)];
0182 end
0183 end
0184 end
0185
0186 if isempty(sys(i_sys).ssini)
0187 sys(i_sys).ssini = cell(sys(i_sys).Nss,1);
0188 for i=1:sys(i_sys).Nss
0189 sys(i_sys).ssini{i} = zeros(sys(i_sys).sssizes(i),1);
0190 end
0191 end
0192
0193
0194
0195 if isempty(sys(i_sys).outputnames)
0196 sys(i_sys).outputnames = cell(1,sys(i_sys).Noutputs);
0197 for i=1:sys(i_sys).Noutputs
0198 sys(i_sys).outputnames{i} = ['output ',num2str(i)];
0199 end
0200 end
0201
0202 if isempty(sys(i_sys).outputvarnames)
0203 sys(i_sys).outputvarnames = cell(1,sys(i_sys).Noutputs);
0204 for i=1:sys(i_sys).Noutputs
0205 sys(i_sys).outputvarnames{i} = cell(1,sys(i_sys).outputsizes(i));
0206 for j=1:sys(i_sys).outputsizes(i)
0207 sys(i_sys).outputvarnames{i}{j} = [sys(i_sys).outputnames{i},'>' num2str(j)];
0208 end
0209 end
0210 end
0211
0212
0213
0214 if isempty(sys(i_sys).paramsigmas)
0215 sys(i_sys).paramsigmas = zeros(1,sys(i_sys).Nparams);
0216 end
0217
0218
0219
0220
0221 if ~( sys(i_sys).Ninputs==size(sys(i_sys).bmats,2) ...
0222 && sys(i_sys).Ninputs==size(sys(i_sys).dmats,2) ...
0223 && sys(i_sys).Ninputs==size(sys(i_sys).bmats_handles,2) ...
0224 && sys(i_sys).Ninputs==size(sys(i_sys).dmats_handles,2) ...
0225 && sys(i_sys).Ninputs==length(sys(i_sys).inputnames) ...
0226 && sys(i_sys).Ninputs==length(sys(i_sys).inputvarnames) ...
0227 && sys(i_sys).Ninputs==length(sys(i_sys).inputsizes) )
0228 error(['error in ssm ',sys(i_sys).name,' because there are ',...
0229 num2str(size(sys(i_sys).bmats,2)),' columns in B , ',...
0230 num2str(size(sys(i_sys).dmats,2)),' columns in D , ',...
0231 num2str(size(sys(i_sys).bmats_handles,2)),' columns in bmats_handles , ',...
0232 num2str(size(sys(i_sys).dmats_handles,2)),' columns in dmats_handles , ',...
0233 num2str(length(sys(i_sys).inputnames)),' inputnames, ',...
0234 num2str(length(sys(i_sys).inputvarnames)),' blocks in inputvarnames and ',...
0235 num2str(length(sys(i_sys).inputsizes)),' inputsizes'] );
0236 end
0237
0238
0239 if ~( sys(i_sys).Nss==size(sys(i_sys).amats,2) ...
0240 && sys(i_sys).Nss==size(sys(i_sys).amats,1) ...
0241 && sys(i_sys).Nss==size(sys(i_sys).bmats,1) ...
0242 && sys(i_sys).Nss==size(sys(i_sys).cmats,2) ...
0243 && sys(i_sys).Nss==size(sys(i_sys).amats_handles,2) ...
0244 && sys(i_sys).Nss==size(sys(i_sys).amats_handles,1) ...
0245 && sys(i_sys).Nss==size(sys(i_sys).bmats_handles,1) ...
0246 && sys(i_sys).Nss==size(sys(i_sys).cmats_handles,2) ...
0247 && sys(i_sys).Nss==length(sys(i_sys).ssnames) ...
0248 && sys(i_sys).Nss==length(sys(i_sys).ssvarnames) ...
0249 && sys(i_sys).Nss==length(sys(i_sys).sssizes) )
0250 error(['error in ssm ',sys(i_sys).name,' because there are ',...
0251 num2str(size(sys(i_sys).amats,2)),' columns in A, ',...
0252 num2str(size(sys(i_sys).amats,1)),' lines in A, ',...
0253 num2str(size(sys(i_sys).bmats,1)),' lines in B, ',...
0254 num2str(size(sys(i_sys).cmats,2)),' columns in C, ',...
0255 num2str(size(sys(i_sys).amats_handles,2)),' columns in A_handles, ',...
0256 num2str(size(sys(i_sys).amats_handles,1)),' lines in A_handles, ',...
0257 num2str(size(sys(i_sys).bmats_handles,1)),' lines in B_handles, ',...
0258 num2str(size(sys(i_sys).cmats_handles,2)),' columns in C_handles, ',...
0259 num2str(length(sys(i_sys).ssnames)),' ssnames, ',...
0260 num2str(length(sys(i_sys).ssvarnames)),' blocks in ssvarnames and ',...
0261 num2str(length(sys(i_sys).sssizes)),' sssizes'] );
0262 end
0263
0264
0265 if ~( sys(i_sys).Noutputs==size(sys(i_sys).cmats,1) ...
0266 && sys(i_sys).Noutputs==size(sys(i_sys).dmats,1) ...
0267 && sys(i_sys).Noutputs==size(sys(i_sys).cmats_handles,1) ...
0268 && sys(i_sys).Noutputs==size(sys(i_sys).dmats_handles,1) ...
0269 && sys(i_sys).Noutputs==length(sys(i_sys).outputnames) ...
0270 && sys(i_sys).Noutputs==length(sys(i_sys).outputvarnames) ...
0271 && sys(i_sys).Noutputs==length(sys(i_sys).outputsizes) )
0272 error(['error in ssm ',sys(i_sys).name,' because there are ',...
0273 num2str(size(sys(i_sys).cmats,1)),' lines in C, ',...
0274 num2str(size(sys(i_sys).dmats,1)),' lines in D, ',...
0275 num2str(size(sys(i_sys).cmats_handles,1)),' lines in C_handles, ',...
0276 num2str(size(sys(i_sys).dmats_handles,1)),' lines in D_handles, ',...
0277 num2str(length(sys(i_sys).outputnames)),' outputnames, ',...
0278 num2str(length(sys(i_sys).outputvarnames)),' blocks in outputvarnames and ',...
0279 num2str(length(sys(i_sys).outputsizes)),' outputsizes'] );
0280 end
0281
0282
0283 for i=1:sys(i_sys).Ninputs
0284 if ~isequal(sys(i_sys).inputsizes(i), -1)
0285 if ~( sys(i_sys).inputsizes(i) == length(sys(i_sys).inputvarnames{i}) )
0286 error(['error in ssm ', sys(i_sys).name, ...
0287 ' because the input number ', num2str(i),...
0288 ' named ', sys(i_sys).inputnames{i}, ...
0289 ' and of size ', num2str(sys(i_sys).inputsizes(i)), ...
0290 ' has an inputvarnames vector of size ', num2str(length(sys(i_sys).inputvarnames{i})) ]);
0291 end
0292 else
0293 str=['warning, input named ',sys(i_sys).inputnames{i},...
0294 ' has all matrices empty, should be deleted'] ;
0295 utils.helper.msg(utils.const.msg.MNAME,str);
0296 end
0297 for j=1:sys(i_sys).Noutputs
0298 if ~isequal(sys(i_sys).dmats{j,i}, [])
0299 if ~( sys(i_sys).inputsizes(i) == size(sys(i_sys).dmats{j,i},2) )
0300 error(['error in ssm ', sys(i_sys).name, ...
0301 ' because the input number ', num2str(i),...
0302 ' named ', sys(i_sys).inputnames{i}, ...
0303 ' and of size ', num2str(sys(i_sys).inputsizes(i)), ...
0304 ' has a D matrix of width ', num2str(size(sys(i_sys).dmats{j,i},2)) ]);
0305 end
0306 end
0307 end
0308 for j=1:sys(i_sys).Nss
0309 if ~isequal(sys(i_sys).bmats{j,i}, [])
0310 if ~( sys(i_sys).inputsizes(i) == size(sys(i_sys).bmats{j,i},2) )
0311 error(['error in ssm ', sys(i_sys).name, ...
0312 ' because the input number ', num2str(i),...
0313 ' named ', sys(i_sys).inputnames{i}, ...
0314 ' and of size ', num2str(sys(i_sys).inputsizes(i)), ...
0315 ' has a B matrix of width ', num2str(size(sys(i_sys).bmats{j,i},2)) ]);
0316 end
0317 end
0318 end
0319 end
0320
0321
0322 for i=1:sys(i_sys).Noutputs
0323 if ~isequal(sys(i_sys).outputsizes(i), -1)
0324 if ~( sys(i_sys).outputsizes(i) == length(sys(i_sys).outputvarnames{i}) )
0325 error(['error in ssm ', sys(i_sys).name, ...
0326 ' because the output number ', num2str(i),...
0327 ' named ', sys(i_sys).outputnames{i}, ...
0328 ' and of size ', num2str(sys(i_sys).outputsizes(i)), ...
0329 ' has an outputvarnames vector of size ', num2str(length(sys(i_sys).outputvarnames{i})) ]);
0330 end
0331 else
0332 str = ['warning, output named ',sys(i_sys).outputnames{i},...
0333 ' has all matrices empty, should be deleted'];
0334 utils.helper.msg(utils.const.msg.MNAME, str);
0335 end
0336 for j=1:sys(i_sys).Ninputs
0337 if ~isequal(sys(i_sys).dmats{i,j}, [])
0338 if ~( sys(i_sys).outputsizes(i) == size(sys(i_sys).dmats{i,j},1) )
0339 error(['error in ssm ', sys(i_sys).name, ...
0340 ' because the output number ', num2str(i),...
0341 ' named ', sys(i_sys).outputnames{i}, ...
0342 ' and of size ', num2str(sys(i_sys).outputsizes(i)), ...
0343 ' has a D matrix of height ', num2str(size(sys(i_sys).dmats{i,j},1)) ]);
0344 end
0345 end
0346 end
0347 for j=1:sys(i_sys).Nss
0348 if ~isequal(sys(i_sys).cmats{i,j}, [])
0349 if ~( sys(i_sys).outputsizes(i) == size(sys(i_sys).cmats{i,j},1) )
0350 error(['error in ssm ', sys(i_sys).name, ...
0351 ' because the output number ', num2str(i),...
0352 ' named ', sys(i_sys).outputnames{i}, ...
0353 ' and of size ', num2str(sys(i_sys).outputsizes(i)), ...
0354 ' has a C matrix of height ', num2str(size(sys(i_sys).cmats{i,j},1)) ]);
0355 end
0356 end
0357 end
0358 end
0359
0360
0361 for i=1:sys(i_sys).Nss
0362 if ~isequal(sys(i_sys).sssizes(i), -1)
0363 if ~( sys(i_sys).sssizes(i) == length(sys(i_sys).ssvarnames{i}) )
0364 error(['error in ssm ', sys(i_sys).name, ...
0365 ' because the state space number ', num2str(i),...
0366 ' named ', sys(i_sys).ssnames{i}, ...
0367 ' and of size ', num2str(sys(i_sys).sssizes(i)), ...
0368 ' has a ssvarnames vector of size ', num2str(length(sys(i_sys).ssvarnames{i})) ]);
0369 end
0370 else
0371 str = ['warning, output named ',sys(i_sys).outputnames{i},...
0372 ' has all matrices empty, should be deleted'];
0373 utils.helper.msg(utils.const.msg.MNAME, str);
0374 end
0375 for j=1:sys(i_sys).Ninputs
0376 if ~isequal(sys(i_sys).bmats{i,j}, [])
0377 if ~( sys(i_sys).sssizes(i) == size(sys(i_sys).bmats{i,j},1) )
0378 error(['error in ssm ', sys(i_sys).name, ...
0379 ' because the state space number ', num2str(i),...
0380 ' named ', sys(i_sys).ssnames{i}, ...
0381 ' and of size ', num2str(sys(i_sys).sssizes(i)), ...
0382 ' has a B matrix of height ', num2str(size(sys(i_sys).bmats{i,j},1)) ]);
0383 end
0384 end
0385 end
0386 for j=1:sys(i_sys).Nss
0387 if ~isequal(sys(i_sys).mmats{i,j}, [])
0388 if ~( sys(i_sys).sssizes(i) == size(sys(i_sys).mmats{i,j},1) ...
0389 && sys(i_sys).sssizes(j) == size(sys(i_sys).mmats{i,j},2) )
0390 error(['error in ssm ', sys(i_sys).name, ...
0391 ' because the state space position ', num2str(i), ' ' , num2str(j),...
0392 ' named ', sys(i_sys).ssnames{i}, 'and ', sys(i_sys).ssnames{j}, ...
0393 ' and of size ', num2str([sys(i_sys).sssizes(i),sys(i_sys).sssizes(j)] ), ...
0394 ' has a A matrix of size ', num2str(size(sys(i_sys).amats{i,j})) ]);
0395 end
0396 end
0397 end
0398 for j=1:sys(i_sys).Nss
0399 if ~( sys(i_sys).sssizes(j) == size(sys(i_sys).ssini{j},1) )
0400 error(['error in ssm ', sys(i_sys).name, ...
0401 ' because the state space position ', num2str(i), ...
0402 ' named ', sys(i_sys).ssnames{i}, ...
0403 ' and of size ', num2str(sys(i_sys).sssizes(i) ), ...
0404 ' has a ssini vector of height ', num2str(size(sys(i_sys).ssini{j},1)) ]);
0405 end
0406 end
0407 for j=1:sys(i_sys).Noutputs
0408 if ~isequal(sys(i_sys).cmats{j,i}, [])
0409 if ~( sys(i_sys).sssizes(i) == size(sys(i_sys).cmats{j,i},2) )
0410 error(['error in ssm ', sys(i_sys).name, ...
0411 ' because the state space number ', num2str(i),...
0412 ' named ', sys(i_sys).ssnames{i}, ...
0413 ' and of size ', num2str(sys(i_sys).sssizes(i)), ...
0414 ' has a C matrix of width ', num2str(size(sys(i_sys).cmats{j,i},2)) ]);
0415 end
0416 end
0417 end
0418
0419 end
0420
0421
0422 if ~( sys(i_sys).Nparams == length(sys(i_sys).paramvalues) ...
0423 && sys(i_sys).Nparams == length(sys(i_sys).paramsigmas))
0424 error(['error in ssm ',sys(i_sys).name,' because there are ',...
0425 num2str(sys(i_sys).Nparams),' parameter names but ',...
0426 num2str(length(sys(i_sys).paramvalues)),' parameter values, and ',...
0427 num2str(length(sys(i_sys).paramsigmas)),' parametersigmas.']);
0428 end
0429
0430
0431 for i_input=1:sys(i_sys).Ninputs
0432 [pos, sum] = ssm.cellstrfind(sys(i_sys).inputnames,sys(i_sys).inputnames{i_input},'all');
0433 if sum>1
0434 error(['error because system ',sys(i_sys).name,' has ',num2str(sum),' inputs named ',sys(i_sys).inputnames{i_input}]);
0435 end
0436 end
0437 for i_output=1:sys(i_sys).Noutputs
0438 [pos, sum] = ssm.cellstrfind(sys(i_sys).outputnames,sys(i_sys).outputnames{i_output},'all');
0439 if sum>1
0440 error(['error because system ',sys(i_sys).name,' has ',num2str(sum),' outputs named ',sys(i_sys).outputnames{i_output}]);
0441 end
0442 end
0443 for i_ss=1:sys(i_sys).Nss
0444 [pos, sum] = ssm.cellstrfind(sys(i_sys).ssnames,sys(i_sys).ssnames{i_ss},'all');
0445 if sum>1
0446 error(['error because system ',sys(i_sys).name,' has ',num2str(sum),' state space named ',sys(i_sys).ssnames{i_ss}]);
0447 end
0448 end
0449 for i_input=1:sys(i_sys).Nparams
0450 if i_input <= sys(i_sys).Nparams
0451 [pos, sum] = ssm.cellstrfind(sys(i_sys).paramnames,sys(i_sys).paramnames{i_input},'all');
0452 if sum>1
0453 if sys(i_sys).paramvalues(pos(1))==sys(i_sys).paramvalues(pos(1))
0454 if sys(i_sys).paramsigmas(pos(1))==sys(i_sys).paramsigmas(pos(1))
0455 sys(i_sys).paramsigmas = [sys(i_sys).paramsigmas(1:pos(1)-1) sys(i_sys).paramsigmas(pos(1)+1 : sys(i_sys).Nparams)];
0456 sys(i_sys).paramvalues = [sys(i_sys).paramvalues(1:pos(1)-1) sys(i_sys).paramvalues(pos(1)+1 : sys(i_sys).Nparams)];
0457 sys(i_sys).paramnames = [sys(i_sys).paramnames(1:pos(1)-1) sys(i_sys).paramnames(pos(1)+1 : sys(i_sys).Nparams)];
0458 sys(i_sys).Nparams = sys(i_sys).Nparams-1;
0459 str = ['warning because parameter ', sys(i_sys).paramnames{pos(2)-1}, ' was found ', num2str(sum), ' times in ', sys(i_sys).name];
0460 utils.helper.msg(utils.const.msg.MNAME, str);
0461 else
0462 str = ['error because system ',sys(i_sys).name,' has ',num2str(sum),' parameters named ',sys(i_sys).paramnames{i_input}, ' with different sigmas'];
0463 utils.helper.msg(utils.const.msg.MNAME, str);
0464 end
0465 else
0466 str = ['error because system ',sys(i_sys).name,' has ',num2str(sum),' parameters named ',sys(i_sys).paramnames{i_input}, ' with different values'];
0467 utils.helper.msg(utils.const.msg.MNAME, str);
0468 end
0469 end
0470 end
0471 end
0472
0473
0474
0475 Fields = {...
0476 'amats' 'bmats' 'cmats' 'dmats' 'mmats' 'isnumerical' 'timestep'...
0477 'amats_handles' 'bmats_handles' 'cmats_handles' 'dmats_handles' ...
0478 'inputnames' 'inputvarnames' 'inputsizes' 'Ninputs' ...
0479 'ssnames' 'ssvarnames' 'sssizes' 'Nss' 'ssini' ...
0480 'outputnames' 'outputvarnames' 'outputsizes' 'Noutputs'...
0481 'paramnames' , 'paramvalues' 'paramsigmas' 'Nparams' };
0482 Classes = {...
0483 'doublesym' 'doublesym' 'doublesym' 'doublesym' 'doublesym' 'logical' 'double'...
0484 'cell' 'cell' 'cell' 'cell'...
0485 'cellstr' 'cellcellstr' 'double' 'double' ...
0486 'cellstr' 'cellcellstr' 'double' 'double' 'cell' ...
0487 'cellstr' 'cellcellstr' 'double' 'double' ...
0488 'cellstr' 'double' 'double' 'double' ...
0489 };
0490
0491 for f = [Fields ; Classes]
0492 if isequal(f{2},'doublesym')
0493 for i_input = 1:length(sys(i_sys).(f{1}))
0494 if ~( isa(sys(i_sys).(f{1}){i_input},'double') || isa(sys(i_sys).(f{1}){i_input},'sym') )
0495 error(['error because in ssm ',sys(i_sys).name,' because element ',num2str(i_input),...
0496 ' of field ', f{1},' is of type ',class(sys(i_sys).(f{1})),...
0497 ' instead of '' double'' or ''sym'' ']);
0498 end
0499 end
0500 elseif isequal(f{2},'cellstr')
0501 if ~( iscellstr(sys(i_sys).(f{1})) )
0502 error(['error because in ssm ',sys(i_sys).name,...
0503 ' because field ', f{1},' is of type ',class(sys(i_sys).(f{1})),...
0504 ' instead of ''cellstr'' ']);
0505 end
0506 elseif isequal(f{2},'cellcellstr')
0507 if ~( iscell(sys(i_sys).(f{1})) )
0508 error(['error because in ssm ',sys(i_sys).name,...
0509 ' because field ', f{1},' is of type ',class(sys(i_sys).(f{1})),...
0510 ' instead of ''cellcellstr'' ']);
0511 end
0512 for i=1:length(sys(i_sys).(f{1}))
0513 if ~( iscellstr(sys(i_sys).(f{1}){i}) )
0514 error(['error because in ssm ',sys(i_sys).name,...
0515 ' because field ', f{1},' is of type ',class(sys(i_sys).(f{1})),...
0516 ' instead of ''cellcellstr'' ']);
0517 end
0518 end
0519 else
0520 if ~isa(sys(i_sys).(f{1}),f{2})
0521 error(['error because in ssm ',sys(i_sys).name,' because field ',...
0522 f{1},' is of type ',class(sys(i_sys).(f{1})),' instead of ', f{2}]);
0523 end
0524 end
0525 end
0526 end
0527 varargout = {sys};
0528 end