今天只写一段:
%%%%%%%%%%%%%%%%%%%%%说明 %%%%%%%%%%%%%%%%%%%
四个基本子空间:前面已经分别给出了四个基本子空间的基的代码,他们的确
算得上是对矩阵的一些基本认识。通过他们可以对一个矩阵的空间意义做出
简单的想象。当然他们也是后续求解矩阵方程、投影、正交的基础。现在我们
用一段代码一次求出四个基本子空间。
%%%%%%%%%%%%%%%%%%%%%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.