home *** CD-ROM | disk | FTP | other *** search
- function X = pinv(A,tol)
- %PINV Pseudoinverse.
- % X = PINV(A) produces a matrix X of the same dimensions
- % as A' so that A*X*A = A, X*A*X = X and AX and XA
- % are Hermitian. The computation is based on SVD(A) and any
- % singular values less than a tolerance are treated as zero.
- % The default tolerance is MAX(SIZE(A)) * NORM(A) * EPS.
- % This tolerance may be overridden with X = PINV(A,tol).
- %
- % See also RANK.
-
- % Copyright (c) 1984-93 by The MathWorks, Inc.
-
- [U,S,V] = svd(A,0);
- if min(size(S)) == 1
- S = S(1);
- else
- S = diag(S);
- end
- if (nargin == 1)
- tol = max(size(A)) * S(1) * eps;
- end
- r = sum(S > tol);
- if (r == 0)
- X = zeros(size(A'));
- else
- S = diag(ones(r,1)./S(1:r));
- X = V(:,1:r)*S*U(:,1:r)';
- end
-