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