有关线性代数的Matlab代码笔记(2)——行空间、零空间
2014-02-05 19:58
1021 查看
今天继续,尝试加入一些范例
依然是简单的内容:
%%%%%%%%%%%%%%%%%%%%%说明 %%%%%%%%%%%%%%%%%%%
行空间的基:按行的角度来看待矩阵,更多介绍在代码说明里,简单的利用了昨天的代码。
%%%%%%%%%%%%%%%%%%%%%CODE %%%%%%%%%%%%%%%%%%
function B = rowbasis(A)
% rowbasis 行空间的基
%
% B = rowbasis(A) 返回A的行空间的一组基
% 以B的列表示
% A的行空间相当于A的转置的列空间
% rowbasis 找出A'中线性无关的
% 前r列,r代表A的秩
%
B = colbasis(A');
%%%%%%%%%%%%%%%%%%%%%范例 %%%%%%%%%%%%%%%%%%
>> A=[1,1,1;1,3,2;2,3,4]
A =
1 1 1
1 3 2
2 3 4
>> rowbasis(A)
ans =
1 1 2
1 3 3
1 2 4
%%%%%%%%%%%%%%%%%%%%%说明 %%%%%%%%%%%%%%%%%%%
零空间的基:这个零空间的代码值得好好看看,体现了线性代数里关于列意义的基本思想。
直接看去你可能会不知道这些代码在干什么。因为一个简单的语句可能包含了很多操作。
我自己不太明白的时候是喜欢举个例子,把代码一句一句执行来看看的。这里要注意的是
零空间里的列指示了矩阵里构成零向量的列的线性组合。而代码里用到了很多构成矩阵的办法。
%%%%%%%%%%%%%%%%%%%%%CODE %%%%%%%%%%%%%%%%%%
function N = nulbasis(A)
% nulbasis 零空间的基.
%
% N = nulbasis(A) 在N的列中返回A的零空间的一组基
% 包含了Ax=0的n-r个特殊解
% freecol是自由列.
%
% Example:
%
% >> A = [1 2 0 3;
% [0 0 1 4];
%
% >> N = nulbasis(A)
%
% N = [-2 -3]
% [ 1 0]
% [ 0 -4]
% [ 0 1]
%
[R, pivcol] = rref(A, sqrt(eps));%精度sqrt(eps)=1.4901e-008
[m, n] = size(A);
r = length(pivcol);
freecol = 1:n;
freecol(pivcol) = [];%主元所在列
N = zeros(n, n-r);
N(freecol, : ) = eye(n-r);%由自由列序号给零空间的行按单位矩阵赋值
N(pivcol, : ) = -R(1:r, freecol);%主元所在列赋行简化阶梯矩阵对应值相反数
%这样组合能得到零向量
%这个方法接近我们手动求零空间的算法
依然是简单的内容:
%%%%%%%%%%%%%%%%%%%%%说明 %%%%%%%%%%%%%%%%%%%
行空间的基:按行的角度来看待矩阵,更多介绍在代码说明里,简单的利用了昨天的代码。
%%%%%%%%%%%%%%%%%%%%%CODE %%%%%%%%%%%%%%%%%%
function B = rowbasis(A)
% rowbasis 行空间的基
%
% B = rowbasis(A) 返回A的行空间的一组基
% 以B的列表示
% A的行空间相当于A的转置的列空间
% rowbasis 找出A'中线性无关的
% 前r列,r代表A的秩
%
B = colbasis(A');
%%%%%%%%%%%%%%%%%%%%%范例 %%%%%%%%%%%%%%%%%%
>> A=[1,1,1;1,3,2;2,3,4]
A =
1 1 1
1 3 2
2 3 4
>> rowbasis(A)
ans =
1 1 2
1 3 3
1 2 4
%%%%%%%%%%%%%%%%%%%%%说明 %%%%%%%%%%%%%%%%%%%
零空间的基:这个零空间的代码值得好好看看,体现了线性代数里关于列意义的基本思想。
直接看去你可能会不知道这些代码在干什么。因为一个简单的语句可能包含了很多操作。
我自己不太明白的时候是喜欢举个例子,把代码一句一句执行来看看的。这里要注意的是
零空间里的列指示了矩阵里构成零向量的列的线性组合。而代码里用到了很多构成矩阵的办法。
%%%%%%%%%%%%%%%%%%%%%CODE %%%%%%%%%%%%%%%%%%
function N = nulbasis(A)
% nulbasis 零空间的基.
%
% N = nulbasis(A) 在N的列中返回A的零空间的一组基
% 包含了Ax=0的n-r个特殊解
% freecol是自由列.
%
% Example:
%
% >> A = [1 2 0 3;
% [0 0 1 4];
%
% >> N = nulbasis(A)
%
% N = [-2 -3]
% [ 1 0]
% [ 0 -4]
% [ 0 1]
%
[R, pivcol] = rref(A, sqrt(eps));%精度sqrt(eps)=1.4901e-008
[m, n] = size(A);
r = length(pivcol);
freecol = 1:n;
freecol(pivcol) = [];%主元所在列
N = zeros(n, n-r);
N(freecol, : ) = eye(n-r);%由自由列序号给零空间的行按单位矩阵赋值
N(pivcol, : ) = -R(1:r, freecol);%主元所在列赋行简化阶梯矩阵对应值相反数
%这样组合能得到零向量
%这个方法接近我们手动求零空间的算法
相关文章推荐
- 有关线性代数的Matlab代码笔记(3)——左零空间、二维图像绘制
- 有关线性代数的Matlab代码笔记(4)——生成矩阵,消元矩阵
- 有关线性代数的Matlab代码笔记(6)——LU分解(没有行变换)
- 有关线性代数的Matlab代码笔记(5)——四个基本子空间
- 有关线性代数的Matlab代码笔记(1)——置换和列空间
- MIT18.06线性代数课程笔记11:矩阵空间、子空间的交和、秩一矩阵
- MIT线性代数课程笔记对应代码-【lecture 4】
- MIT18.06线性代数课程笔记9:线性无关、向量拓展空间、空间的基、空间维度
- MIT线性代数课程笔记对应代码-【lecture 1】
- MIT_线性代数笔记_06_列空间和零空间
- MIT线性代数课程笔记对应代码-【lecture 3】
- 线性代数笔记-6 列空间与向量空间
- 线性代数笔记-5 转置、置换、向量空间
- 线性代数笔记(1):向量空间与子空间
- 线性代数笔记(线性方程组、线性空间,线性变换)
- MIT_线性代数笔记_05_转置、置换、空间R^n
- MIT_线性代数笔记_11_矩阵空间、秩1矩阵、小世界图
- 线性代数笔记(内积空间,实二次型)
- 线性代数-向量空间-基向量定义
- MIT线性代数笔记-第十讲