0001 function varargout = svd(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 VERSION = '$Id: svd.m,v 1.13 2007/11/26 14:48:13 ingo Exp $';
0035
0036 U = [];
0037 S = [];
0038 V = [];
0039
0040
0041
0042 if nargin == 2
0043 if isa(varargin{1}, 'ao') && ischar(varargin{2})
0044 in = char(varargin{2});
0045 if strcmp(in, 'Params')
0046 varargout{1} = getDefaultPL();
0047 return
0048 elseif strcmp(in, 'Version')
0049 varargout{1} = VERSION;
0050 return
0051 end
0052 end
0053 end
0054
0055
0056 in_names = {};
0057 for ii = 1:nargin
0058 in_names{end+1} = inputname(ii);
0059 end
0060
0061 [as, pl, invars] = collect_inputs(varargin, in_names);
0062
0063 if ~isempty (pl)
0064 pl = combine(pl);
0065 end
0066
0067
0068 if ~isempty (pl)
0069 pl = combine(pl);
0070 end
0071
0072
0073 for j=1:numel(as)
0074 a = as(j);
0075
0076 d = get(a, 'data');
0077 dinfo = whos('d');
0078
0079
0080 dtype = dinfo.class;
0081
0082 udata = [];
0083 sdata = [];
0084 vdata = [];
0085
0086 switch dtype
0087 case 'cdata'
0088 disp('* DETERMINANT of cdata object');
0089 if nargout <= 1
0090 [h, udata] = single_operation(a.data, 'svd',pl);
0091 elseif nargout == 2
0092 [h, udata, sdata] = single_operation(a.data, 'svd',pl);
0093 elseif nargout == 3
0094 [h, udata, sdata, vdata] = single_operation(a.data, 'svd',pl);
0095 end
0096
0097 h = set(h, 'inhists', [a.hist]);
0098
0099
0100 h = set(h, 'invars', cellstr(invars{j}));
0101
0102 u = ao(udata, h);
0103 u = setnh(u, 'name', sprintf('u_svd(%s)', char(invars{j})));
0104 U = [U u];
0105 if ~isempty(sdata)
0106 s = ao(sdata, h);
0107 s = setnh(s, 'name', sprintf('s_svd(%s)', char(invars{j})));
0108 S = [S s];
0109 end
0110 if ~isempty(vdata)
0111 v = ao(vdata, h);
0112 v = setnh(v, 'name', sprintf('v_svd(%s)', char(invars{j})));
0113 V = [V v];
0114 end
0115
0116 case {'tsdata','fsdata','xydata'}
0117 error('### this function works for cdata type AO only')
0118 otherwise
0119 error('### unknown data type.')
0120 end
0121
0122 end
0123
0124
0125 U = reshape(U, size(as));
0126 varargout{1} = U;
0127
0128 if nargout > 1
0129
0130 S = reshape(S, size(as));
0131 varargout{2} = S;
0132 if nargout > 2
0133
0134 V = reshape(V, size(as));
0135 varargout{3} = V;
0136 if nargout > 3
0137 error('### wrong number of outputs')
0138 end
0139 end
0140 end
0141
0142
0143 function plo = getDefaultPL()
0144
0145 plo = plist();
0146 plo = append(plo, 'option', []);
0147
0148