基于MATLAB的逆矩阵、相似矩阵、正交矩阵(附完整代码)

一. 符号多项式与数值多项式的转换

向量P=[a_1,a_2,\ldots,a_{n+1}],可以利用MATLAB将此向量转换为多项式表示,格式如下:

f=poly2sym(P)

当然,反过来也可以将符号多项式转换为向量,格式如下:

P=sym2poly(f)

备注:注意函数字母的顺序,2代表"to"

例题1

用不同的形式表示f=s^5+2s^4+3s^3+4s^2+5s+6

解:

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的非奇异方阵,则其逆矩阵C=A^{-1},且满足如下表达式:

AC=CA=I

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

分析:

  1. invhilb()函数求出的逆矩阵,误差更小
  2. 对接近奇异矩阵,高阶次的情况不建议直接使用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博客

另外,奇异矩阵不存在相应的逆矩阵,利用符号工具箱求不出对应的结果。例如以下矩阵,就没有对应的逆矩阵:

A=\begin{bmatrix}16&2&3&13\\ 5&11&10&8\\ 9&7&6&12\\ 4&14&15&1\\ \end{bmatrix}

含有变量的矩阵,也可以利用inv()函数求其逆矩阵的。

例题4

求矩阵C=\begin{bmatrix}a_1&a_2\\ a_3&a_4 \end{bmatrix}的逆矩阵。

解:

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=B^{-1}AB

经过相似变换后,X矩阵的秩、迹、行列式和特征值是保持不变的,这些值与A矩阵式完全一致。

利用MATLAB代码,可以求矩阵A的正交矩阵,如下:

Q=orth(A)

例题5

(1)求矩阵A的正交矩阵,并分析其误差

(2)求矩阵A的相似矩阵,并验证它们的秩、迹、行列式特征值保持一致

A=\begin{bmatrix}5&9&8&3\\0&3&2&4\\2&3&5&9\\3&4&5&8 \end{bmatrix}

解:

(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的正交基矩阵,并分析其结果和误差。

A=\begin{bmatrix}16&2&3&13\\5&11&10&8\\ 9&7&6&12\\ 4&14&15&1 \end{bmatrix}

解:

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为长方形矩阵

  • 9
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唠嗑!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值