有关线性代数的Matlab代码笔记(5)——四个基本子空间

今天只写一段:

%%%%%%%%%%%%%%%%%%%%%说明 %%%%%%%%%%%%%%%%%%%

四个基本子空间前面已经分别给出了四个基本子空间的基的代码,他们的确

算得上是对矩阵的一些基本认识。通过他们可以对一个矩阵的空间意义做出

简单的想象。当然他们也是后续求解矩阵方程、投影、正交的基础。现在我们

用一段代码一次求出四个基本子空间。

%%%%%%%%%%%%%%%%%%%%%CODE %%%%%%%%%%%%%%%%%%

function [ROW, N, COL, LN] = fourbase(A)


% fourbase  四个基本子空间的四组基。 

% [ROW, N, COL, LN] = fourbase(A) 结果的各矩阵的列
%分别表示矩阵A的行空间、零空间、列空间、左零空间的一组
%基
%
% 四个子空间的基都来自于 E*A = R.
% 矩阵ROW产生于R中主元所在列.
% 矩阵N产生于n-r个特解. 
% 矩阵COL包含了A的r个主元所在列.
% 矩阵LN 包含了E的最后m-r行.
% 那m-r行乘以A 就得到了R中的m-r个零行.
% 注意A = COL * ROW' .


[m, n] = size(A);
r = rank(A);
E = elim(A);%E是A的消元矩阵,之前编写过。
[R, pivcol] = rref(A);
ROW = R(1:r, :)'; 
N = nulbasis(R);
COL = A(:, pivcol);
LN = E((r+1):m, :)';

%这里LN能这么求是因为E对应着R的零行,给出了得到零行的组合。

%%%%%%%%%%%%%%%%%%%%%范例 %%%%%%%%%%%%%%%%%%

>> A=[1 1 2 3;1 2 5 4;2 3 7 7;2 2 4 6]


A =


     1     1     2     3
     1     2     5     4
     2     3     7     7
     2     2     4     6


>> [Row,N,Col,Ln]=fourbase(A)


Row =


     1     0
     0     1
    -1     3
     2     1




N =


     1    -2
    -3    -1
     1     0
     0     1




Col =


     1     1
     1     2
     2     3
     2     2




Ln =


    1.0000         0
         0    1.0000
         0   -1.0000
   -0.5000    0.5000

稍微说明一下:构造的矩阵A第三列是前两列之和,第四列是第一列的两倍,

故矩阵的秩是2. 可以得到行空间和列空间的秩都是2。零空间的秩是m-r=2;

左零空间的秩是n-r=2.

你可能感兴趣的:(自学自玩)