Matlab学习系列16 数值计算线代篇.docx
- 文档编号:4684510
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:16
- 大小:183.34KB
Matlab学习系列16 数值计算线代篇.docx
《Matlab学习系列16 数值计算线代篇.docx》由会员分享,可在线阅读,更多相关《Matlab学习系列16 数值计算线代篇.docx(16页珍藏版)》请在冰豆网上搜索。
Matlab学习系列16数值计算线代篇
16.数值计算—线代篇
一、行列式
det(A)——矩阵A的行列式;
inv(A)——矩阵A的逆;
rank(A)——矩阵A的秩;
B(:
i)=b——将向量b赋给矩阵B的第i行;
[A,eye(5)]——在矩阵A右端,拼接5阶单位矩阵;
[U,s]=rref(A)——对矩阵A作行变换,U返回A的最简行阶梯形矩阵,s为行向量存储U的各行首个非0元所在列号,length(s)即为A的秩;
例1用初等行变换法求矩阵
的逆。
代码:
formatshortg%省略小数位多余的0
A=[123;221;343];
B=rref([A,eye(3)])
%对矩阵[A,I]进行初等行变换,得到最简行阶梯矩阵B
if(rank(B(:
1:
3))==3)
%判断B的前3列是否为单位阵,若是取出后3列,即A逆
A1=B(:
4:
6)
else
disp('A不可逆');
end
运行结果:
B=10013-2
010-1.5-32.5
00111-1
A1=13-2
-1.5-32.5
11-1
例2解方程
代码:
symsx;
A=[3211;322-x^21;5132;7-x^2132];
D=det(A)
f=factor(D)%对行列式D进行因式分解
X=solve(D)%求方程“D=0”的解
运行结果:
D=-3*(x^2-1)*(x^2-2)
f=-3*(x-1)*(x+1)*(x^2-2)
X=-1
1
2^(1/2)
-2^(1/2)
二、向量组的线性相关性
例3向量组
求它的秩和一个最大线性无关组,并用来表示其它向量。
代码:
A=[2-135;4-313;3-234;4-11517;7-6-70]';
%formatrat;%使用分数表示
rref(A)
运行结果:
ans=10021
010-35
0014-5
00000
可见,向量组的秩是3,
是一个最大线性无关组;并且
,
注:
也可以用[R,s]=rref(A);length(s)得到秩。
三、线性方程组的通解
null(A,‘r’)——返回齐次线性方程组Ax=0的基础解系,选项’r’返回有理数解,否则按分数显示;
x0=inv(A)*b——若A-1存在,直接可以得到Ax=b的一个特解x0,否则只能按求解理论求解;
subs(A,k,n),将矩阵或式A中的k用n代替。
例4求下列方程组的通解:
代码:
symsx;
A=[2,4,-1,4,16;-3,-6,2,-6,-23;3,6,-4,6,19;1,2,5,2,19];
b=[-2;7;-23;43];
[R,s]=rref([A,b])
[m,n]=size(A);
x0=zeros(n,1);%将特解x0初始化为零向量
r=length(s);%矩阵A的秩赋给变量r
x0(s,:
)=R(1:
r,end)%矩阵R的最后一列按基准元素的位置得到特解x0
x=null(A,'r')%得到对应齐次方程组Ax=0的基础解系
运行结果:
R=120293
001028
000000
000000
s=13
x0=3
0
8
0
0
x=-2-2-9
100
00-2
010
001
例5已知齐次线性方程组
问当k取何值时方程组有非零解?
在有非零解的情况下,求出其基础解系。
代码:
symsk;
A=[1-2*k,3,3,3;3,2-k,3,3;3,3,2-k,3;3,3,3,11-k];
D=det(A)
K=solve(D)%解方程“D=0”即要求的k值
fori=1:
4
Ak=double(subs(A,k,K(i)));
%用K(i)替换矩阵A中的k,得到的是符号矩阵,
%再用double函数转化为数值矩阵
x=null(Ak,'r')
end
运行结果:
D=2*k^4-31*k^3+30*k^2+161*k+98
K=-1
-1
7/2
14
x=-1-1
10
01
00
x=-1-1
10
01
00
x=-0.5
-1
-1
1
x=0.2
0.4
0.4
1
四、基变换
设Rn中的两组基向量U和V(都是n×n矩阵),若向量w在以U为基的坐标系内的坐标为wu(n×1数组),在以V为基的坐标系内的坐标为wv(n×1数组),则在基准坐标系内的坐标应分别为U*wu和V*wv,这两者应该相等,即
U*wu=V*wv
所谓基坐标的变换,就是已知wu,求出wv.将上式两边均左乘V-1,得到
wv=V-1*U*wu
故坐标变换矩阵为P=V-1*U.
例6已知R4中的两组基向量为
,
求从U到V的坐标变换矩阵P.
代码:
U=[11-1-1;2-12-1;-1110;0111];
V=[20-21;1113;0211;1222];
P=inv(V)*U%从U到V的基变换矩阵
wu=[1234]';
wv=P*wu
%已知某向量在U坐标系下坐标为wu,求它在V坐标系下的坐标
运行结果:
P=01-11
-1100
0001
1-11-1
wv=3
1
4
-2
五、特征值与特征向量
变换可以用矩阵表示。
矩阵A的特征向量是指,经过矩阵A(左乘)变换后不发生方向改变的那些向量;特征值是指在经过这些变换后特征向量的伸缩的倍数。
对于实对称矩阵来说,不同特征值对应的特征向量必定正交。
矩阵(变换)A的所有特征向量组成了该矩阵(变换)的一组基,可以理解为坐标系的坐标轴,可以把这个坐标系扭曲、拉伸、旋转,称为基变换。
例如,在主成分分析中,通过在拉伸最大的方向设置基,忽略一些小的量,可以极大的压缩数据而减小失真。
矩阵(变换)的所有特征向量作为空间的基之所以重要,是因为在这些方向上矩阵(变换)可以拉伸向量而不必扭曲和选择它,使得计算大为简单。
2.Matlab实现
orth(A)——返回矩阵A的列向量组构成空间的标准正交基;
P=poly(A)——返回矩阵A的特征多项式,P是行向量,元素为多项式系数;
roots(P)——求多项式P的零点;
r=eig(A)——r为列向量,元素为矩阵A的特征值;
[V,D]=eig(A)——矩阵D为A的特征值(从小到大排列)所构成的对角矩阵,V的列向量为A的特征向量,与D中特征值一一对应(VTAV=D,VT=V-1),D也是矩阵A的相似对角化矩阵;
[V,D]=schur(A)——矩阵D为对称矩阵A的特征值所构成的对角阵,V的列为A的单位特征向量,与D中特征值一一对应;
例7求下列矩阵的特征值和特征向量:
代码:
formatshortg
A=[123;213;112];
%特征多项式法
%P=poly(A);
%lamda1=roots(P)
lamda2=eig(A)
[V,D]=eig(A)
inv(V)*A*V
运行结果:
lamda2=5.0000
-1.0000
-0.0000
V=0.63960.7071-0.5774
0.6396-0.7071-0.5774
0.4264-0.00000.5774
D=5.000000
0-1.00000
00-0.0000
ans=5.0000-0.00000
-0.0000-1.0000-0.0000
-0.00000.00000
例8(人口迁徙模型)设某大城市的总人口是固定的。
人口的分布则因居民在市区和郊区之间迁徙而变化。
每年有6%的市区居民搬到郊区去住,而有2%的郊区居民搬到市区。
假如开始时有30%的居民住在市区,70%的居民住在郊区,问:
(1)10年后市区和郊区的居民人口比例是多少?
30年、50年后又如何?
(2)无限增加时间,该比例最终是否会趋于稳定?
问题分析:
该问题可以用矩阵乘法来描述。
(1)把人口变量用市区xc和郊区xs两个分量表示,一年以后,市区人口为xc1=(1-0.06)xc0+0.02xs0,郊区人口xs1=0.06xc0+(1-0.02)xs0,用矩阵乘法来表示:
从初始到k年,此关系保持不变,故
对于
(2),借助矩阵A的特征值和特征向量,因为A作用在其特征向量上只改变值大小(为其特征值的倍数)而不改变方向。
为此先求出A的特征值λ1,λ2及特征向量v1,v2;将x0用特征向量v1,v2作为坐标系表示出来(即做以[v1,v2]为基坐标的基变换),
x0=αv1+βv2
从而,
令k趋于∞,判断xk是否存在极限。
代码:
x0=[0.3;0.7];
A=[0.940.02;0.060.98];
x1=A*x0
x10=A^10*x0
x50=A^50*x0
[V,D]=eig(A)
V(:
1)=V(:
1)./V(2,1);
V(:
2)=V(:
2)./V(1,2)%对V做初等变换化简
k=inv(V)*x0%求x0用特征向量作为坐标系的表示
%x0在原坐标系I中的表示为x0,
%则基坐标变换到在坐标系V的表示为x=P*x0=inv(V)*I*x0
symsn;
xn=k
(1)*D(1,1)^n*V(:
1)+k
(2)*D(2,2)^n*V(:
2);
%xn=-0.05*(0.92)^n*v1+0.25*1^n*v2
limit(xn,n,inf)
运行结果:
x1=0.2960
0.7040
x10=0.2717
0.7283
x50=0.2508
0.7492
V=-0.7071-0.3162
0.7071-0.9487
D=0.92000
01.0000
V=-1.00001.0000
1.00003.0000
k=-0.0500
0.2500
ans=1/4
3/4
最终得到:
无限增加时间k,市区和郊区人口之比将趋向一组常数0.25/0.75.
六、二次型
例9用正交变换法将下列二次型化为标准型(保持几何形状不变):
代码:
A=[1-20;-22-2;0,-2,3];%输入二次型的矩阵A
[V,D]=eig(A)
%或用[V,D]=schur(A),结果相同;V为正交变换矩阵,即Y=VX
symsy1y2y3;
f=[y1,y2,y3]*D*[y1;y2;y3]
运行结果:
V=-0.6667-0.66670.3333
-0.66670.3333-0.6667
-0.33330.66670.6667
D=-1.000000
02.00000
005.0000
f=-y1^2+2*y2^2+5*y3^2
注:
XTAX=YTVTAVY=YTDY
七、用矩阵做图形变换
图形变换是指对图形进行平移、旋转、缩放、投影(透视)等变换,其实质是改变图形的各个顶点的坐标。
图形变换可以通过对表示图形坐标的矩阵进行运算来实现,称为矩阵变换法:
注:
也可以用变换矩阵左乘实现,上式两边转置即可,即:
BTAT=CT.
下面只介绍二维图形的矩阵变换,代码示例是类似的省略之。
1.基本变换
(1)缩放变换
若a=d则为等比例缩放;若a=1,则x方向不变;若a=0,则图形压缩为y轴上的线段。
例10已知三角形的三个顶点坐标,绘制三角形并进行缩放变换。
代码:
ABC=[44;13;31];%三角形的三个顶点
E=[ABC(1,1),ABC(1,2)];%为了让图形封闭,在末尾补上起始点
ABC=[ABC;E]
subplot(1,2,1)
plot(ABC(:
1),ABC(:
2),'r');%将各个顶点连线,绘制三角形
axis([0,5,0,5]);
%放缩变换
a=0.6;
d=1.2;
T=[a0;0d];%变换矩阵
ABC1=ABC*T;%对原顶点做变换得到新的顶点
subplot(1,2,2)
plot(ABC1(:
1),ABC1(:
2),'g');%绘制变换后的三角形
axis([0,5,0,5]);
运行结果:
(2)对称变换
①关于原点的对称变换
②关于x轴的对称变换
关于y轴的对称变换
③关于直线y=x的对称变换
关于直线y=-x的对称变换
(3)错切变换(延x轴或y轴一个方向移动,另一个方向不变)
①延x轴方向错切
变换后,平行于x轴的直线变换后仍平行于x轴;平行于y轴的直线变换后,y=0的点不动(不动点),y≠0的点沿x方向平移了cy,形成与y轴夹角为θ的直线,且tgθ=cy/y=c.
②延y轴方向错切
(4)绕坐标原点的旋转变换
变换矩阵为
逆时针方向旋转时角度θ取正值;顺时针方向旋转时角度θ取负值。
2.平移变换
2×2变换矩阵是不能实现平移变换的,为此需要扩展一维。
注:
补上一维的常数,称为齐次坐标表示法;若常数=1,称为标准齐次坐标表示法。
若坐标变换结果是非标准化齐次坐标表示,应将其化为标准齐次坐标表示,方法是所有项都除以齐次项:
例11已知三角形的三个顶点坐标,绘制三角形并进行平移变换。
代码:
ABC=[34;13;31];%三角形的三个顶点
E=[ABC(1,1),ABC(1,2)];%为了让图形封闭,在末尾补上起始点
ABC=[ABC;E]
subplot(1,2,1)
plot(ABC(:
1),ABC(:
2),'r');%将各个顶点连线,绘制三角形
axis([0,5,0,5]);
%平移变换
ABC1=[ABC,ones(length(ABC),1)];
%加上一列1扩维,变成标准齐次坐标表示
l=1;
m=0.5;
T=[100;010;lm1];%平移变换矩阵
ABC2=ABC1*T;%做平移变换
subplot(1,2,2)
plot(ABC2(:
1),ABC2(:
2),'g');
axis([0,5,0,5]);
运行结果:
注:
三维变换矩阵还具备更多的功能,总结如下:
3.组合变换
一些复杂的变换都可以分解为若干基本变换的组合,二维组合变换矩阵T=T1×T2×…×Tm,其中Ti是基本变换矩阵,具有不可交换性。
例如,
(1)绕坐标原点以外的任意一点P(x0,y0)旋转θ角的旋转变换
可分解为:
①平移变换——将旋转中心P平移到坐标原点;
②旋转变换——绕坐标原点旋转θ角;
③平移变换——使旋转中心P回到原来的位置
于是,组合变换矩阵为:
T=T1*T2*T3.
(2)关于任意直线的对称变换
设直线方程为:
Ax+By+C=0(A≠0,B≠0),直线在x轴上的截距为-C/A,在y轴上的截距为-C/B,直线与x轴的夹角α=arctg(-A/B).
可分解为:
①平移变换——沿x轴方向平移C/A,使直线通过坐标原点;
②旋转变换——绕坐标原点旋转-α角,使直线与x轴重合;
③关于x轴做对称变换;
④旋转变换——绕坐标原点旋转α角;
⑤平移变换——沿x方向平移-C/A,使直线回到原位置
于是组合变换矩阵为:
T=T1*T2*T3*T4*T5.
注:
(1)可见前面的二维变换矩阵都可以统一地在三维矩阵中实现;
(2)以上介绍的二维图形的矩阵变换,类似地可以推广到三维空间图形的矩阵变换。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab学习系列16 数值计算线代篇 Matlab 学习 系列 16 数值 计算 线代篇