0001
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
0027
0028
0029
0030
0031 function varargout = reduce(varargin)
0032
0033
0034 utils.helper.msg(utils.const.msg.MNAME, ['running ', mfilename]);
0035
0036
0037 if utils.helper.isinfocall(varargin{:})
0038 varargout{1} = getInfo(varargin{3});
0039 return
0040 end
0041
0042
0043 if ~nargin==2, error('wrong number of inputs!'), end
0044
0045 if ~isequal(class(varargin{1}),'ssm'), error(['argument is not a ssm but a ', class(varargin{1})]),end
0046 if ~isequal(class(varargin{2}),'plist'), error(['argument is not a plist but a ', class(varargin{2})]),end
0047
0048 sys = varargin{1};
0049 options = varargin{2};
0050 Nsys = length(sys);
0051 Noptions = length(options);
0052
0053
0054
0055 if Noptions==1
0056 sys_out(:,1) = reshape(sys,Nsys,1);
0057 else
0058 for j=1:Noptions
0059 sys_out(:,j)=copy(reshape(sys,Nsys,1),true);
0060 end
0061 end
0062 for i_sys=1:Nsys
0063 for i_options=1:Noptions
0064 erase_inputs = find(options(i_options), 'ERASE_INPUTS');
0065 erase_states = find(options(i_options), 'ERASE_STATES');
0066 erase_outputs = find(options(i_options), 'ERASE_OUTPUTS');
0067 for i=1:length(erase_inputs)
0068 [pos, sum, value] = ssm.cellstrfind(sys_out(i_sys, i_options).inputnames, erase_inputs{i},'all');
0069 if sum==0
0070 error(['input to delete named ',erase_inputs{i}, ' was not found in system ', sys_out(i_sys, i_options).name])
0071 elseif sum>1
0072 error(['input to delete named ',erase_inputs{i}, ' was found more than once in system ', sys_out(i_sys, i_options).name])
0073 else
0074 Ninputs = sys_out(i_sys, i_options).Ninputs;
0075 sys_out(i_sys, i_options).bmats = [ sys_out(i_sys, i_options).bmats(:, 1:pos-1) sys_out(i_sys, i_options).bmats(:, pos+1:Ninputs) ] ;
0076 sys_out(i_sys, i_options).dmats = [ sys_out(i_sys, i_options).dmats(:, 1:pos-1) sys_out(i_sys, i_options).dmats(:, pos+1:Ninputs) ] ;
0077 sys_out(i_sys, i_options).bmats_handles = [ sys_out(i_sys, i_options).bmats_handles(:, 1:pos-1) sys_out(i_sys, i_options).bmats_handles(:, pos+1:Ninputs) ] ;
0078 sys_out(i_sys, i_options).dmats_handles = [ sys_out(i_sys, i_options).dmats_handles(:, 1:pos-1) sys_out(i_sys, i_options).dmats_handles(:, pos+1:Ninputs) ] ;
0079 sys_out(i_sys, i_options).inputnames = [ sys_out(i_sys, i_options).inputnames(1:pos-1) sys_out(i_sys, i_options).inputnames(pos+1:Ninputs) ];
0080 sys_out(i_sys, i_options).inputvarnames = [ sys_out(i_sys, i_options).inputvarnames(1:pos-1) sys_out(i_sys, i_options).inputvarnames(pos+1:Ninputs)];
0081 sys_out(i_sys, i_options).inputsizes = [];
0082 end
0083 end
0084 for i=1:length(erase_outputs)
0085 [pos, sum, value] = ssm.cellstrfind(sys_out(i_sys, i_options).outputnames, erase_outputs{i},'all');
0086 if sum==0
0087 error(['input to delete named ',erase_outputs{i}, ' was not found in system ', sys_out(i_sys, i_options).name])
0088 elseif sum>1
0089 error(['input to delete named ',erase_outputs{i}, ' was found more than once in system ', sys_out(i_sys, i_options).name])
0090 else
0091 Noutputs = sys_out(i_sys, i_options).Noutputs;
0092 sys_out(i_sys, i_options).cmats = [ sys_out(i_sys, i_options).cmats(1:pos-1, :) ; sys_out(i_sys, i_options).cmats(pos+1:Noutputs, :) ];
0093 sys_out(i_sys, i_options).dmats = [ sys_out(i_sys, i_options).dmats(1:pos-1, :) ; sys_out(i_sys, i_options).dmats(pos+1:Noutputs, :) ];
0094 sys_out(i_sys, i_options).cmats_handles = [ sys_out(i_sys, i_options).cmats_handles(1:pos-1, :) ; sys_out(i_sys, i_options).cmats_handles(pos+1:Noutputs, :) ];
0095 sys_out(i_sys, i_options).dmats_handles = [ sys_out(i_sys, i_options).dmats_handles(1:pos-1, :) ; sys_out(i_sys, i_options).dmats_handles(pos+1:Noutputs, :) ];
0096 sys_out(i_sys, i_options).outputnames = [ sys_out(i_sys, i_options).outputnames(1:pos-1) sys_out(i_sys, i_options).outputnames(pos+1:Noutputs) ];
0097 sys_out(i_sys, i_options).outputvarnames = [ sys_out(i_sys, i_options).outputvarnames(1:pos-1) sys_out(i_sys, i_options).outputvarnames(pos+1:Noutputs)];
0098 sys_out(i_sys, i_options).outputsizes = [];
0099 end
0100 end
0101 for i=1:length(erase_states)
0102 [pos, sum, value] = ssm.cellstrfind(sys_out(i_sys, i_options).ssnames, erase_states{i},'all');
0103 if sum==0
0104 error(['input to delete named ',erase_states{i}, ' was not found in system ', sys_out(i_sys, i_options).name])
0105 elseif sum>1
0106 error(['input to delete named ',erase_states{i}, ' was found more than once in system ', sys_out(i_sys, i_options).name])
0107 else
0108 Nss = sys_out(i_sys, i_options).Nss;
0109 sys_out(i_sys, i_options).amats = [...
0110 sys_out(i_sys, i_options).amats(1:pos-1, 1:pos-1) sys_out(i_sys, i_options).amats(1:pos-1, pos+1:Nss) ;...
0111 sys_out(i_sys, i_options).amats(pos+1:Nss, 1:pos-1) sys_out(i_sys, i_options).amats(pos+1:Nss, pos+1:Nss)];
0112 sys_out(i_sys, i_options).mmats = [...
0113 sys_out(i_sys, i_options).mmats(1:pos-1, 1:pos-1) sys_out(i_sys, i_options).mmats(1:pos-1, pos+1:Nss) ;...
0114 sys_out(i_sys, i_options).mmats(pos+1:Nss, 1:pos-1) sys_out(i_sys, i_options).mmats(pos+1:Nss, pos+1:Nss)];
0115 sys_out(i_sys, i_options).bmats = [ sys_out(i_sys, i_options).bmats(1:pos-1, :) ; sys_out(i_sys, i_options).bmats(pos+1:Nss, :) ];
0116 sys_out(i_sys, i_options).cmats = [ sys_out(i_sys, i_options).cmats(:, 1:pos-1) sys_out(i_sys, i_options).cmats(:, pos+1:Nss) ];
0117 sys_out(i_sys, i_options).amats_handles = [...
0118 sys_out(i_sys, i_options).amats_handles(1:pos-1, 1:pos-1) sys_out(i_sys, i_options).amats_handles(1:pos-1, pos+1:Nss) ;...
0119 sys_out(i_sys, i_options).amats_handles(pos+1:Nss, 1:pos-1) sys_out(i_sys, i_options).amats_handles(pos+1:Nss, pos+1:Nss)];
0120 sys_out(i_sys, i_options).bmats_handles = [ sys_out(i_sys, i_options).bmats_handles(1:pos-1, :) ; sys_out(i_sys, i_options).bmats_handles(pos+1:Nss, :) ];
0121 sys_out(i_sys, i_options).cmats_handles = [ sys_out(i_sys, i_options).cmats_handles(:, 1:pos-1) sys_out(i_sys, i_options).cmats_handles(:, pos+1:Nss) ];
0122 sys_out(i_sys, i_options).ssnames = [ sys_out(i_sys, i_options).ssnames(1:pos-1) sys_out(i_sys, i_options).ssnames(pos+1:Nss) ];
0123 sys_out(i_sys, i_options).ssvarnames = [ sys_out(i_sys, i_options).ssvarnames(1:pos-1) sys_out(i_sys, i_options).ssvarnames(pos+1:Nss)];
0124 sys_out(i_sys, i_options).sssizes = [];
0125 end
0126 end
0127 sys_out(i_sys, i_options) = validate(sys_out(i_sys, i_options));
0128 sys_out(i_sys, i_options).addHistory(ssm.getInfo(mfilename), options(i_options) , {''}, sys(i_sys).hist );
0129 end
0130 end
0131 varargout = {sys_out};
0132 end
0133
0134
0135 function ii = getInfo(varargin)
0136 if nargin == 1 && strcmpi(varargin{1}, 'None')
0137 sets = {};
0138 pls = [];
0139 elseif nargin == 1 && ~isempty(varargin{1}) && ischar(varargin{1})
0140 sets{1} = varargin{1};
0141 pls = getDefaultPlist(sets{1});
0142 else
0143 sets = {'Default'};
0144 pls = [];
0145 for kk=1:numel(sets)
0146 pls = [pls getDefaultPlist(sets{kk})];
0147 end
0148 end
0149
0150 ii = minfo(mfilename, 'ssm', '', 'STATESPACE', '$Id: resp.m,v 1.17 2008/07/22 10:22:38 ingo Exp $', sets, pls);
0151 end
0152
0153 function plo = getDefaultPlist(set)
0154 switch set
0155 case 'Default'
0156 plo = plist( 'ERASE_STATES', {'state 1'}, ...
0157 'ERASE_INPUTS', {'INPUT 2'}, ...
0158 'ERASE_OUTPUTS', 'OUTPUT 3');
0159 otherwise
0160 error('### Unknown parameter set [%s].', set);
0161 end
0162 end
0163