一. 符号多项式与数值多项式的转换
向量,可以利用MATLAB将此向量转换为多项式表示,格式如下:
f=poly2sym(P)
当然,反过来也可以将符号多项式转换为向量,格式如下:
P=sym2poly(f)
备注:注意函数字母的顺序,2代表"to"
例题1
用不同的形式表示。
解:
MATLAB代码如下:
clc;clear;
P=[1 2 3 4 5 6]; %按照降幂的顺序,将系数表示成多项式
f=poly2sym(P) %转换成符号型多项式
P1=sym2poly(f) %从f转换成数值形式的多项式
运行结果:
f =x^5 + 2*x^4 + 3*x^3 + 4*x^2 + 5*x + 6
P1 =1 2 3 4 5 6
二. 矩阵的逆矩阵
令A为n✖️n的非奇异方阵,则其逆矩阵,且满足如下表达式:
MATLAB调用的格式,如下:
C=inv(A)
例题2
利用不同的方法计算4阶Hilbert矩阵的逆矩阵,并比较误差。
解:
MATLAB代码:
clc;clear;
format long; %有效数字16位
H=hilb(4);
%直接利用inv函数求逆矩阵
H1=inv(H)
E1=norm(H*inv(H)-eye(size(H))) %计算误差范数
%利用invhilb()函数求逆矩阵
H2=invhilb(4)
E2=norm(H*invhilb(4)-eye(size(H)))
运行结果:
H1 =
1.0e+03 *
0.015999999999999 -0.119999999999991 0.239999999999979 -0.139999999999986
-0.119999999999991 1.199999999999898 -2.699999999999748 1.679999999999834
0.239999999999979 -2.699999999999748 6.479999999999380 -4.199999999999592
-0.139999999999986 1.679999999999835 -4.199999999999593 2.799999999999732
E1 = 4.585334383488104e-13
H2 =
16 -120 240 -140
-120 1200 -2700 1680
240 -2700 6480 -4200
-140 1680 -4200 2800
E2 = 5.684341886080801e-14
分析:
- invhilb()函数求出的逆矩阵,误差更小
- 对接近奇异矩阵,高阶次的情况不建议直接使用inv()函数,可以辅助符号工具箱
例题3
利用符号型矩阵求30阶Hilbert矩阵的逆矩阵,并求其误差。
解:
MATLAB代码:
clc;clear;
H=sym(hilb(30));
H1=inv(H) %求逆
E1=norm(double(H*H1-eye(size(H)))) %计算范数误差
运行结果:
30阶Hilb矩阵的求逆结果非常长,此处放出一部分:
E1 =0
分析:利用符号型矩阵求出的结果非常好,范数误差为0
如果对Hlbert矩阵不熟悉的小伙伴,可以参看这篇博客:
基于MATLAB的矩阵性质:行列式,秩,迹,范数,特征多项式与矩阵多项式_唠嗑!的博客-CSDN博客
另外,奇异矩阵不存在相应的逆矩阵,利用符号工具箱求不出对应的结果。例如以下矩阵,就没有对应的逆矩阵:
含有变量的矩阵,也可以利用inv()函数求其逆矩阵的。
例题4
求矩阵的逆矩阵。
解:
MATLAB代码如下:
clc;clear;
syms a1 a2 a3 a4;
C=[a1 a2;a3 a4];
C1=inv(C)
运行结果:
C1 =
[ a4/(a1*a4 - a2*a3), -a2/(a1*a4 - a2*a3)]
[ -a3/(a1*a4 - a2*a3), a1/(a1*a4 - a2*a3)]
三. 相似变换与正交矩阵
令A为一方阵,B为非奇异矩阵,可以将X矩阵相似变换为A,如下等式:
经过相似变换后,X矩阵的秩、迹、行列式和特征值是保持不变的,这些值与A矩阵式完全一致。
利用MATLAB代码,可以求矩阵A的正交矩阵,如下:
Q=orth(A)
例题5
(1)求矩阵A的正交矩阵,并分析其误差
(2)求矩阵A的相似矩阵,并验证它们的秩、迹、行列式和特征值保持一致
解:
(1)
MATLAB代码如下:
clc;clear;
A=[5 9 8 3;0 3 2 4;2 3 5 9;3 4 5 8];
Q=orth(A) %计算正交矩阵
%计算两个范数误差
E1=norm(Q'*Q-eye(4))
E2=norm(Q*Q'-eye(4))
运行结果:
Q =
-0.619671340140301 0.773813880904394 -0.026187274644937 -0.128583570393247
-0.254847576927508 -0.155059655254056 0.949030283052491 0.101738575260225
-0.519781065663075 -0.529820044088602 -0.156282788746931 -0.651685548866623
-0.529988477724807 -0.310578978545115 -0.272454470393609 0.740554841404303
E1 =
6.864210016106769e-16
E2 =
5.954287625931994e-16
(2)
MATLAB代码如下:
clc;clear;
A=[5 9 8 3;0 3 2 4;2 3 5 9;3 4 5 8];
Q=orth(A); %计算正交矩阵
C=Q'*A*Q %计算相似矩阵
%比较行列式
det_A=det(A)
det_C=det(C)
%比较迹
trace_A=trace(A)
trace_C=trace(C)
%比较秩
rank_A=rank(A)
rank_C=rank(C)
%比较特征值
eig_A=eig(A)
eig_C=eig(C)
运行结果:
C =
17.925057378000762 6.462719720294041 -4.471443805828351 -2.035430394056599
-0.028176367934769 1.719350371804496 4.681584194604236 -5.073533409228641
0.679969849088359 -0.938582090234548 1.067433333071010 0.663121379729752
-0.054869356773865 0.365821867858506 0.177602682111582 0.288158917123740
det_A =1.200000000000000e+02
det_C = 1.200000000000000e+02
trace_A =21
trace_C =21.000000000000007
rank_A =4
rank_C = 4
eig_A =
17.820526571492692 + 0.000000000000000i
1.190811102512153 + 2.649886414907482i
1.190811102512153 - 2.649886414907482i
0.797851223483017 + 0.000000000000000i
eig_C =
17.820526571492696 + 0.000000000000000i
1.190811102512152 + 2.649886414907483i
1.190811102512152 - 2.649886414907483i
0.797851223483016 + 0.000000000000000i
例题6
计算矩阵A的正交基矩阵,并分析其结果和误差。
解:
MATLAB代码如下:
clc;clear;
A=[16 2 3 13;5 11 10 8;9 7 6 12;4 14 15 1];
Q=orth(A)
E1=norm(Q'*Q-eye(3))
运行结果:
Q =
-0.500000000000000 0.670820393249937 0.500000000000000
-0.500000000000000 -0.223606797749979 -0.500000000000000
-0.500000000000000 0.223606797749979 -0.500000000000000
-0.500000000000000 -0.670820393249937 0.500000000000000
E1 =
5.333708524809506e-16
分析:原矩阵A是奇异矩阵,所以得到的正交矩阵Q为长方形矩阵