SVD与线性代数4个基本子空间的关系

G. Strang线性代数公开课中指出的线性代数中最重要内容:四个基本子空间,可以通过对矩阵A的SVD分解完美的展现。
以下内容会逐步完善。

A=USVTA=USV^T, 假设 rank(A)=rrank(A)=r

  1. 行空间R(A)=C(AT)R(A)=C(A^T) : V(1:r,:)V(1:r,:);
  2. 行空间零空间N(A)N(A) : V(r+1:n,:)V(r+1:n,:);
  3. 列空间C(A)C(A): U(1:r,:)U(1:r,:);
  4. 列空间零空间N(AT)N(A^T), U(r+1:m,:)U(r+1:m,:)

有了以上关系,则可以轻松的看懂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

SVD与线性代数4个基本子空间的关系
SVD与线性代数4个基本子空间的关系
SVD与线性代数4个基本子空间的关系