pinvmt#

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, err } = pinvmt(x, tol)#
Parameters:
  • x (NxM matrix) – data

  • tol (scalar) – any singular values less than tol are treated as zero in determining the rank of the input matrix.

Returns:
  • y (MxN matrix) –

    that satisfies the 4 Moore-Penrose conditions:

    \(xyx = x\)

    \(yxy = y\)

    \(xy\) is symmetric

    \(yx\) is symmetric

  • err (scalar) – if not all of the singular values can be computed err will be nonzero.

Examples#

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

tol = 1e-13;

// 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 pinvmt to solve";
    { Api, err } = pinvmt(A, tol);
   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#

svdmt.src