pinv#

Purpose#

Computes the Moore-Penrose pseudo-inverse of a matrix, using the singular value decomposition. This pseudo-inverse is one particular type of generalized inverse.

Format#

y = pinv(x)#
Parameters:

x (NxM matrix) – data

Returns:

y (MxN matrix) –

satisfies the 4 Moore-Penrose conditions:

\(xyx = x\)

\(yxy = y\)

\(xy\) is symmetric

\(yx\) is symmetric

Global Input#

_svdtol:

(scalar), any singular values less than _svdtol are treated as zero in determining the rank of the input matrix. The default value for _svdtol is 1.0e-13.

Global Output#

_svderr:

(scalar), if not all of the singular values can be computed _svderr will be nonzero.

Examples#

pinv() can be used to solve an undertermined least squares problem.

// Create an underdetermined system of equations 'A'
A = rndn(4, 5);

// Create a right hand side
b = rndn(4, 1);

if rank(A) < cols(A);
   print "A does not have full rank, using pinv to solve";
   Api = pinv(A);
   x = Api*b;
else;
   print "A has full rank, solve with '/' operator";
   x = b/A;
endif;

Least squares problems with full rank can also be solved with the GAUSS functions: ols(), olsqr() and olsqr2().

Source#

svd.src