线性变换TTT的矩阵A∈Pn×n\boldsymbol{A}\in P^{n\times n}A∈Pn×n的对角化,即寻求对角阵Λ\boldsymbol{\Lambda}Λ,使得A\boldsymbol{A}A~Λ\boldsymbol{\Lambda}Λ,需分几步走:
(1)解方程det⁡(λI−A)=0\det(\lambda\boldsymbol{I}-\boldsymbol{A})=0det(λI−A)=0,得根
λ1,λ2,⋯,λk∈P\lambda_1,\lambda_2,\cdots,\lambda_k\in Pλ1​,λ2​,⋯,λk​∈P
为A\boldsymbol{A}A的特征值;
(2)对每一个特征值λi\lambda_iλi​,解齐次线性方程组(λiI−A)x=o(\lambda_i\boldsymbol{I}-\boldsymbol{A})\boldsymbol{x}=\boldsymbol{o}(λi​I−A)x=o,得基础解系αi1,αi2,⋯,αini\boldsymbol{\alpha}_{i1},\boldsymbol{\alpha}_{i2},\cdots,\boldsymbol{\alpha}_{in_i}αi1​,αi2​,⋯,αini​​,i=1,2,⋯,ki=1,2,\cdots,ki=1,2,⋯,k;
(3)若n1+n2+⋯+nk=nn_1+n_2+\cdots+n_k=nn1​+n2​+⋯+nk​=n,则
Λ=diag(λ1,⋯,λ1⏟n1,⋯,λk,⋯,λk⏟nk)\boldsymbol{\Lambda}=\text{diag}(\underbrace{\lambda_1,\cdots,\lambda_1}_{n_1},\cdots,\underbrace{\lambda_k,\cdots,\lambda_k}_{n_k})Λ=diag(n1​λ1​,⋯,λ1​​​,⋯,nk​λk​,⋯,λk​​​)
A\boldsymbol{A}A~Λ\boldsymbol{\Lambda}Λ。即TTT在基α11,⋯,α1n1,⋯,αk1,⋯,αkn1\boldsymbol{\alpha}_{11},\cdots,\boldsymbol{\alpha}_{1n_1},\cdots,\boldsymbol{\alpha}_{k1},\cdots,\boldsymbol{\alpha}_{kn_1}α11​,⋯,α1n1​​,⋯,αk1​,⋯,αkn1​​下的矩阵为Λ\boldsymbol{\Lambda}Λ。
numpy.linalg提供了函数eigvals用来计算方阵的特征值,其调用接口为
eigvals(A)\text{eigvals(A)}eigvals(A)
参数A表示方阵A\boldsymbol{A}A。返回值为A\boldsymbol{A}A的nnn个根(包括重根)。需要提起注意的是,此处返回的根有可能是复数。对函数eigvals算出A\boldsymbol{A}A的每个ℝ中的特征值λ\lambdaλ,调用博文《线性方程组的通解》中定义的mySolve函数,计算(λI−A)x=o(\lambda\boldsymbol{I}-\boldsymbol{A})\boldsymbol{x}=\boldsymbol{o}(λI−A)x=o的基础解系,记为属于λ\lambdaλ的线性无关的特征向量。把属于各不同特征值的特征向量按序排列,若这些向量的总数恰为nnn,则构成向量空间的一个基底,且各特征值(包括重复值)构成的对角阵就是TTT在这个基下的矩阵。
例1 用Python计算矩阵A=(122212221)∈\boldsymbol{A}=\begin{pmatrix}1&2&2\\2&1&2\\2&2&1\end{pmatrix}\inA=⎝⎛​122​212​221​⎠⎞​∈ℝ3×3^{3\times3}3×3的对角化。

import numpy as np                               #导入numpy
from fractions import Fraction as F                 #导入Fraction
np.set_printoptions(formatter=                      #设置输出数据格式{'all':lambda x:str(F(x).limit_denominator())})
A=np.array([[1,2,2],                               #设置矩阵[2,1,2],[2,2,1]],dtype='float')
n,_=A.shape                                        #A的阶数
w=np.linalg.eigvals(A)                             #A的特征值
Lambda=np.diag(np.sort(w))                         #对角阵
v=np.unique(np.round(w,decimals=10))              #特征值唯一化
I=np.eye(n)                                        #单位阵
o=np.zeros((n,1))                                  #零向量
lam=v[0]                                           #第1个特征值
P=(mySolve(lam*I-A,o))[:,1:]                       #属于第1个特征值的特征向量
for lam in v[1:]:                                   #其余个特征值X=mySolve(lam*I-A,o)                            #属于特征值的特征向量P=np.hstack((P,X[:,1:n]))
print('对角阵:')
print(Lambda)
print('基:')
print(P)

程序的第5~7行设置矩阵A\boldsymbol{A}A的数据为A。第8行读取A\boldsymbol{A}A的阶数为n。第9行调用numpy.linalg的eigvals函数计算A\boldsymbol{A}A的nnn个特征值存于w。第10行调用numpy的diag函数用w按升序排列的nnn个值构造对角阵Lambda。第11行调用numpy的unique函数将w中的nnn个特征值删掉重复,仅保留不同值。即det⁡(λI−A)=0\det(\lambda\boldsymbol{I}-\boldsymbol{A})=0det(λI−A)=0的所有重根仅算一个。得到的各不相同的特征值按升序存于v。注意,w中存储的A\boldsymbol{A}A的特征值都是浮点型的,为能确定重根,需限制精度。np.round(w,decimals=10)调用numpy的round函数将w中的值限制有效位数为10。第12行设置nnn阶单位阵I,第13行设置nnn-维零向量o。第14行读取第1个特征值λ1\lambda_1λ1​为lam,第15行调用mySolve函数(见程序3.6中定义,第2行导入)解齐次线性方程组(λ1I−A)=o(\lambda_1\boldsymbol{I}-\boldsymbol{A})=\boldsymbol{o}(λ1​I−A)=o,将所得基础解系(存于返回值的第2列起的各列)置于P中。第16~18行的for循环将其余各特征值所属特征向量依次置于P后,最终得到对角化后的基底。运行程序,输出

对角阵:
[[-1  0 0][ 0 -1 0][ 0  0 5]]
基:
[[-1 -1 1][ 1  0 1][ 0  1 1]]

即A=(122212221)∈\boldsymbol{A}=\begin{pmatrix}1&2&2\\2&1&2\\2&2&1\end{pmatrix}\inA=⎝⎛​122​212​221​⎠⎞​∈ℝ3×3^{3\times3}3×3在基α1=(−110),α2=(−101)\boldsymbol{\alpha}_1=\begin{pmatrix}-1\\1\\0\end{pmatrix},\boldsymbol{\alpha}_2=\begin{pmatrix}-1\\0\\1\end{pmatrix}α1​=⎝⎛​−110​⎠⎞​,α2​=⎝⎛​−101​⎠⎞​和α3=(111)\boldsymbol{\alpha}_3=\begin{pmatrix}1\\1\\1\end{pmatrix}α3​=⎝⎛​111​⎠⎞​下对角化为Λ=(−1000−10005)\boldsymbol{\Lambda}=\begin{pmatrix}-1&0&0\\0&-1&0\\0&0&5\end{pmatrix}Λ=⎝⎛​−100​0−10​005​⎠⎞​。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

线性代数Python计算:矩阵对角化相关推荐

  1. 【Python】如何用 python 计算矩阵相乘 - numpy.dot()

    文章目录 一.如何用 python 计算矩阵乘法? 二.实例 参考链接 一.如何用 python 计算矩阵乘法? 使用 Numpy 包里的 dot() 函数. 该函数主要功能有两个:向量点积 和 矩阵 ...

  2. 线性代数Python计算导引

    线性代数是深度学习的数学基础之一,理论完备,方法经典.Python是当下AI系统首选开发工具,易学好用.教学中攒下两者结合的多个课题,覆盖大学理工科<线性代数>课程内容,写成博文以飨读者. ...

  3. 线性代数Python计算:向量空间坐标变换

    向量空间中两组基AAA和BBB之间相互线性表示构成的矩阵为过渡阵.若两组基中之一为自然基,譬如AAA为自然基,则基BBB的各向量在自然基下的坐标即构成基AAA到基BBB的过渡阵P\boldsymbol ...

  4. python计算矩阵对角线之和_Python练习题 028:求3*3矩阵对角线数字之和

    [Python练习题 028] 求一个3*3矩阵对角线元素之和 ----------------------------------------------------- 这题解倒是解出来了,但总觉得 ...

  5. 线性代数Python计算:向量组的最大无关组计算

    对给定的mmm-维向量组 α1=(a11a21⋮am1),α2=(a12a22⋮am2),⋯,αn=(a1na2n⋮amn)\boldsymbol{\alpha}_1=\begin{pmatrix}a ...

  6. 线性代数Python计算:线性变换的值域与核

    设数域PPP上的向量空间PnP^nPn的线性变换TTT,在某个基下其变换矩阵A=(α1,α2,⋯,αn)\boldsymbol{A}=(\boldsymbol{\alpha}_1,\boldsymbo ...

  7. 线性代数Python计算:向量的模及向量间的夹角

    numpy的dot函数计算两个向量α\boldsymbol{\alpha}α和β\boldsymbol{\beta}β的内积: dot(a,b)\text{dot(a,b)}dot(a,b) 两个参数 ...

  8. 线性代数Python计算:消元法与矩阵初等变换

    对线性方程组 {a11x1+a12x2+⋯+a1nxn=b1a21x1+a22x2+⋯+a2nxn=b2⋯⋯⋯am1x1+am2x2+⋯+amnxn=bn\begin{cases}a_{11}x_1+ ...

  9. python计算矩阵行列式_基础 | Python 下的行列式值

    关键词:线性代数 / 矩阵 / 行列式 矩阵作为绝大多数算法的算子,当矩阵里的数字被赋予了意义,例如每个 row 表示了一个线性方程式,那么如果把这些线性方程用向量的形式在 xyz 空间坐标中表示,从 ...

  10. 漫步线性代数二十七——矩阵对角化

    现在我们开始实质性的计算,它非常简单并且在随后的几篇文章里都会用到.特征向量对角化一个矩阵: 3.假设n×nn\times n矩阵有nn个线性无关的特征向量,如果这些向量是矩阵SS的列,那么S−1AS ...

最新文章

  1. PEAR, PECL和Perl的区别
  2. 解决Win8.1键盘输入后鼠标左键响应延迟的问题
  3. 用python计算邮费-python习题1-最大的不可支付邮资问题
  4. 安装和配置Tomcat
  5. 阅读《Oracle内核技术揭秘》的读书笔记
  6. VTK:八叉树可视化用法实战
  7. Python20行代码实现视频字符化
  8. excel如何返回双引号
  9. 大android 平板,15.6英寸安卓大平板? 阿芙罗S1评测
  10. 什么视频会议系统好?
  11. 跳出公式,看清全局,图神经网络(GCN)原理详解
  12. 什么是IEC球压测试?
  13. 苹果cms小主题模板
  14. android 超链接事件,Android之捕获TextView超链接
  15. MOOC 中国大学 python爬取股票信息
  16. 交换机vlan配置实训心得_交换机与VLAN的配置实验报告.doc
  17. R语言survival包的survfit函数拟合生存曲线数据、survminer包的ggsurvplot函数可视化生存曲线、size参数指定曲线粗细、palette参数自定义生存曲线的颜色
  18. 什么是SPU和SKU
  19. [ctfshow]web入门——文件上传(web156-web163)
  20. 0基础快速入门Python,小白必看

热门文章

  1. [CityHunter]点击ListView项目后修改其内容
  2. 机器学习学习整理(二)对数几率回归与支持向量机
  3. This scheduler instance is still active but was recovered by another instanc解决办法
  4. HTML空格符号 nbsp; ensp; emsp; 介绍以及实现中文对齐的方法
  5. 把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩
  6. 图片加载防闪动的CSS方法
  7. PHP、TP5生成下载word
  8. Office2010打开多个excel文件时,开多个excel而不是同一个切换
  9. VM ware下载教程
  10. 自动升级Notes客户机AUT功能实战