0001 function varargout = eig(varargin)
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
0032
0033
0034 if nargin == 2
0035 if isa(varargin{1}, 'ao') && ischar(varargin{2})
0036 in = char(varargin{2});
0037 if strcmp(in, 'Params')
0038 varargout{1} = getDefaultPL();
0039 return
0040 end
0041 end
0042 end
0043
0044
0045 invars = {};
0046 ALGONAME = mfilename;
0047 VERSION = '$Id: eig.m,v 1.8 2007/07/12 15:56:44 ingo Exp $';
0048
0049 as = [];
0050 pl = [];
0051 V = [];
0052 D = [];
0053 vdata = [];
0054 ddata = [];
0055
0056 for j=1:nargin
0057 invars = [invars cellstr(inputname(j))];
0058 if isa(varargin{j}, 'ao')
0059 as = [as varargin{j}];
0060 end
0061 if isa(varargin{j}, 'plist')
0062 pl = [pl varargin{j}];
0063 end
0064 end
0065
0066 if ~isempty (pl)
0067 pl = combine(pl);
0068 end
0069
0070
0071 for j=1:length(as)
0072 a = as(j);
0073
0074 d = get(a, 'data');
0075 dinfo = whos('d');
0076
0077 dtype = dinfo.class;
0078
0079 switch dtype
0080 case 'cdata'
0081 disp('* Eigenvalues of cdata object');
0082 if nargout <= 1
0083 [h, vdata] = single_operation(d, 'eig',pl);
0084 elseif nargout == 2
0085 [h, vdata, ddata] = single_operation(d, 'eig',pl);
0086 end
0087
0088 h = set(h, 'invars', [a.hist]);
0089 v = ao(vdata, h);
0090 v = set(v, 'name', sprintf('v_eig(%s)', char(invars{1})));
0091 V = [V v];
0092 if ~isempty(ddata)
0093 d = ao(ddata, h);
0094 d = set(d, 'name', sprintf('d_eig(%s)', char(invars{1})));
0095 D = [D d];
0096 end
0097 case {'tsdata','fsdata','xydata'}
0098 error('### this function works for cdata type AO only')
0099 otherwise
0100 error('### unknown data type.')
0101 end
0102 end
0103
0104 varargout{1} = V;
0105 if nargout > 1
0106 varargout{2} = D;
0107 if nargout > 2
0108 error('### wrong number of outputs')
0109 end
0110 end
0111
0112
0113 function plo = getDefaultPL()
0114
0115 disp('* creating default plist...');
0116 plo = plist();
0117 plo = append(plo, 'option', '');
0118 disp('* done.');
0119
0120