Home > classes > @ao > svd.m

svd

PURPOSE ^

SVD overloads the determinant function for Analysis objects.

SYNOPSIS ^

function varargout = svd(varargin)

DESCRIPTION ^

 SVD overloads the determinant function for Analysis objects.

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function varargout = svd(varargin)
0002 
0003 % SVD overloads the determinant function for Analysis objects.
0004 
0005 % >>  u = svd (a,pl)
0006 % >> [u, s] = svd (a,pl)
0007 % >> [u, s, v] = svd (a,pl)
0008 %
0009 % >> [u, s, v] = svd (a)
0010 %
0011 % Inputs:
0012 %   a    - input analysis object
0013 %   pl   - a parameter list
0014 % Outputs:
0015 %   like matlab fct
0016 %
0017 % Parameters:
0018 %  'option' - a string or value that can be submited  i.e. 'econ' to produve economy size decomposition
0019 %  - options are the same as for the matlab function
0020 % A Monsky 08-05-07
0021 %
0022 invars = {};
0023 for j=1:nargin
0024   invars = [invars cellstr(inputname(j))];
0025 end
0026 
0027 ALGONAME = mfilename;
0028 VERSION  = '$Id: svd.html,v 1.1 2007/06/08 14:15:03 hewitson Exp $';
0029 
0030 as = [];
0031 ps = [];
0032 for j=1:nargin
0033     a = varargin{j};
0034     if isa(a, 'ao')
0035         as = [as a];
0036     elseif isa(a, 'plist')
0037         ps = [ps a];
0038 %     else
0039 %         option = [option a];
0040     end
0041     
0042 end
0043 
0044 %handle plist
0045 if ~isempty(ps)
0046     if isa(ps, 'plist')
0047         pl = combine(ps);
0048     end
0049 else
0050     pl = plist();
0051 end
0052 
0053 U = [];
0054 S = [];
0055 V = []; 
0056 
0057 % Check input analysis object
0058 for j=1:length(as)  
0059   a = as(j);
0060   
0061   d = get(a, 'data');
0062   dinfo = whos('d');
0063   
0064   % Which data type do we have
0065   dtype = dinfo.class;
0066   
0067   udata = [];
0068   sdata = [];
0069   vdata = [];
0070   
0071   switch dtype
0072      case 'cdata'
0073        disp('* DETERMINANT of cdata object');
0074        if nargout <= 1
0075          [h, udata] = single_operation(a.data, 'svd',pl); 
0076        elseif nargout == 2
0077          [h, udata, sdata] = single_operation(a.data, 'svd',pl);         
0078        elseif nargout == 3
0079          [h, udata, sdata, vdata] = single_operation(a.data, 'svd',pl);
0080        end 
0081        %create analysis object(s)
0082        h = set(h, 'invars', [a.hist]);
0083        u = ao(udata, h);
0084        u = set(u, 'name',  sprintf('u_svd(%s)', char(invars{1})));
0085        U = [U u];
0086        if ~isempty(sdata)
0087            s = ao(sdata, h);
0088            s = set(s, 'name',  sprintf('s_svd(%s)', char(invars{1})));     
0089            S = [S s];
0090        end
0091        if ~isempty(vdata)
0092            v = ao(vdata, h);
0093            v = set(v, 'name',  sprintf('v_svd(%s)', char(invars{1})));
0094            V = [V v];
0095        end
0096               
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   
0103 end
0104 
0105 varargout{1} = U;
0106 if nargout > 1
0107     varargout{2} = S;
0108     if nargout > 2
0109         varargout{3} = V;
0110         if nargout > 3
0111             error('### wrong number of outputs')
0112         end
0113     end
0114 end
0115 
0116 % END

Generated on Fri 08-Jun-2007 16:09:11 by m2html © 2003