SVD与线性代数4个基本子空间的关系
G. Strang线性代数公开课中指出的线性代数中最重要内容:四个基本子空间,可以通过对矩阵A的SVD分解完美的展现。
以下内容会逐步完善。
, 假设
- 行空间 : ;
- 行空间零空间 : ;
- 列空间: ;
- 列空间零空间, 。
有了以上关系,则可以轻松的看懂Matlab中自带函数orth, null, rank
的源代码,这三者的核心都是SVD。
rank.m
tol = max(size(A)) * eps(max(s));
r = sum(s > tol); %
orth.m
[Q,S] = svd(A,'econ'); %S is always square.
s = diag(S);
tol = max(size(A)) * eps(max(s));
r = sum(s > tol);
Q(:, r+1:end) = [];
null.m
[~,S,V] = svd(A,0);
if isempty(A)
Z = V;
else
if m == 1
s = S(1);
else
s = diag(S);
end
tol = max(m,n) * eps(max(s));
r = sum(s > tol);
Z = V(:,r+1:n);
end