Home > classes > @ssm > reduce.m

reduce

PURPOSE ^

reduce enables to do model simplification

SYNOPSIS ^

function varargout = reduce(varargin)

DESCRIPTION ^

 reduce enables to do model simplification
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 DESCRIPTION: reduce enables to do model simplification by erasing some state
 spaces/inputs/outputs

 CALL: varargout = reduce(varargin)

 INPUTS:
 sys -      (array of) ssm objects
 options -   plist of options:
    'ERASE_INPUTS' cell array inputs to delete
    'ERASE_STATES' cell array states to delete
    'ERASE_OUTPUTS' cell array outputs to delete

 OUTPUTS:
           The output array are of size Nsys*Noptions
 sys_out -  (array of) ssm objects without the specified information

 M-FILE INFO: Get information about this methods by calling
              >> ssm.getInfo('reduce')

              Get information about a specified set-plist by calling:
              >> ssm.getInfo('reduce', 'Default')

 HISTORY:  05-08-2008 A Grynagier Creation

 TODO :
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 % reduce enables to do model simplification
0002 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0003 %
0004 % DESCRIPTION: reduce enables to do model simplification by erasing some state
0005 % spaces/inputs/outputs
0006 %
0007 % CALL: varargout = reduce(varargin)
0008 %
0009 % INPUTS:
0010 % sys -      (array of) ssm objects
0011 % options -   plist of options:
0012 %    'ERASE_INPUTS' cell array inputs to delete
0013 %    'ERASE_STATES' cell array states to delete
0014 %    'ERASE_OUTPUTS' cell array outputs to delete
0015 %
0016 % OUTPUTS:
0017 %           The output array are of size Nsys*Noptions
0018 % sys_out -  (array of) ssm objects without the specified information
0019 %
0020 % M-FILE INFO: Get information about this methods by calling
0021 %              >> ssm.getInfo('reduce')
0022 %
0023 %              Get information about a specified set-plist by calling:
0024 %              >> ssm.getInfo('reduce', 'Default')
0025 %
0026 % HISTORY:  05-08-2008 A Grynagier Creation
0027 %
0028 % TODO :
0029 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0030 
0031 function varargout = reduce(varargin)
0032 
0033   %% starting initial checks
0034   utils.helper.msg(utils.const.msg.MNAME, ['running ', mfilename]);
0035 
0036   % Check if this is a call for parameters
0037   if utils.helper.isinfocall(varargin{:})
0038     varargout{1} = getInfo(varargin{3});
0039     return
0040   end
0041 
0042   % checking number of inputs work data
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   %% begin function body
0053 
0054   %% building output depending on options
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   % Build info object
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

Generated on Mon 08-Sep-2008 13:18:47 by m2html © 2003