Mercurial > hg > octave-terminal
changeset 557:e6ae50d8d4eb
[project @ 1994-07-25 20:23:22 by jwe]
Initial revision
author | jwe |
---|---|
date | Mon, 25 Jul 1994 20:23:22 +0000 |
parents | b805b12f3b66 |
children | faf108b99d21 |
files | scripts/linear-algebra/null.m scripts/linear-algebra/orth.m |
diffstat | 2 files changed, 72 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/scripts/linear-algebra/null.m @@ -0,0 +1,36 @@ +function retval = null (A, tol) + +# usage: null (A, tol) +# null (A) +# +# Returns an orthonormal basis of the null space of A. +# +# The dimension of the null space is taken as the number of singular +# values of A not greater than tol; the default for tol is +# max (size (A)) * sigma_max (A) * eps, where sigma_max (A) is the +# maximal singular value of A. + +# written by KH (Kurt.Hornik@neuro.tuwien.ac.at) on Dec 24, 1993 +# copyright Dept of Probability Theory and Statistics TU Wien + + [U, S, V] = svd (A); + + [rows, cols] = size (A); + + s = diag (S); + + if (nargin == 1) + tol = max (size (A)) * s (1) * eps; + else (nargin != 2) + error("usage: null(A [, tol])"); + endif + + rank = sum (s > tol); + + if (rank < cols) + retval = V (:, rank+1:cols); + else + retval = zeros (cols, 0); + endif + +endfunction
new file mode 100644 --- /dev/null +++ b/scripts/linear-algebra/orth.m @@ -0,0 +1,36 @@ +function retval = orth (A, tol) + +# usage: orth (A, tol) +# orth (A) +# +# Returns an orthonormal basis of the range of A. +# +# The dimension of the range space is taken as the number of singular +# values of A greater than tol; the default for tol is +# max (size (A)) * sigma_max (A) * eps, where sigma_max (A) is the +# maximal singular value of A. + +# written by KH (Kurt.Hornik@neuro.tuwien.ac.at) on Dec 24, 1993 +# copyright Dept of Probability Theory and Statistics TU Wien + + [U, S, V] = svd (A); + + [rows, cols] = size (A); + + s = diag (S); + + if (nargin == 1) + tol = max (size (A)) * s (1) * eps; + else if (nargin != 2) + error ("usage: orth (A [, tol])"); + endif + + rank = sum (s > tol); + + if (rank > 0) + retval = -U (:, 1:rank); + else + retval = zeros (rows, 0); + endif + +endfunction