help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Arguments out?


From: Paul Kienzle
Subject: Re: Arguments out?
Date: Thu, 11 Dec 2003 21:31:56 -0500


On Dec 11, 2003, at 6:05 PM, Vic Norton wrote:

Yeah, I thought about that later, Thorsten. Thanks for pointing it out.

So when you write something like

   function   [U, S, V] = svd(A)

and A comes in as an m x n, you might do the computations to get

   U - orthogonal m x m
   S - diagonal m x n
   V - orthogonal n x n

satisfying

   A = U * S * V'

Then you look at nargout.

You will only accept nargout = 0, 1, or 3. If nargout = 0 or 1, you want to return diag(S). If nargout = 3, you want to return the triple [U, S, V]. Apparently your final lines should read something like this

   if (nargout < 2)
      U = diag(S);
   elseif (nargout != 3)
      error("you don't know what you are doing, dummy!");
   endif

This is what bothers me. U and diag(S) are completely different kinds of objects. Writing U = diag(S) simply goes against my grain.

So write it using varargout:

function varargout = svd(A)
    ...
    switch nargout
      {0,1}, varargout = { diag(s) };
      3, varargout = { u, s, v };
      otherwise, usage("sigma=svd(A) or [u,s,v]=svd(A)");
   end
end

or equivalently using meaningless placeholders
for the returned values:

function [r1,r2,r3] = mysvd(A)
  ...
  if nargout<=1, r1=diag(s);
  else r1=u; r2=s; r3=v; end
end

Paul Kienzle
address@hidden



-------------------------------------------------------------
Octave is freely available under the terms of the GNU GPL.

Octave's home on the web:  http://www.octave.org
How to fund new projects:  http://www.octave.org/funding.html
Subscription information:  http://www.octave.org/archive.html
-------------------------------------------------------------



reply via email to

[Prev in Thread] Current Thread [Next in Thread]