当特征值和特征向量已知时查找矩阵

Finding Matrix When Eigen Values & Eigen Vectors were known

提问人:Sabina Zaman 提问时间:10/21/2023 最后编辑:chrslgSabina Zaman 更新时间:10/21/2023 访问量:40

问:

我一直在尝试从特征值和特征向量中找到我的矩阵。 我首先从矩阵中计算特征值和特征向量。 然后,我想验证特征值和特征向量的值。但是没有得到预期的值。我的代码

import numpy as np
from numpy.linalg import eig
a=np.array([[1,2],[2,np.pi]])
w,v=eig(a)
c0=np.outer(v[0],v[0].T)
c1=np.outer(v[1],v[1].T)
a_=w[0]*c0+w[1]*c1

我得到的结果是:

array ([[ 1.     , -2.     ], 
        [-2.     ,  3.14159]])

但我期待与 a 相同的数组。谁能告诉我这里出了什么问题?

python 值特征 向量

评论

2赞 cards 10/21/2023
请将您的代码以纯文本而不是图像的形式添加到问题中,谢谢!!
0赞 cards 10/21/2023
...一个矩阵由特征向量组成,然后计算其逆矩阵。你知道基公式(或相似关系)的变化是什么吗?
0赞 Sabina Zaman 10/21/2023
对不起,不知何故,我无法将我的代码作为普通文本发布。这就是添加图像的原因。而且我不记得基本公式了!
0赞 cards 10/21/2023
基数公式的变更

答:

0赞 chrslg 10/21/2023 #1

的特征向量不是 和 。 是一个变换矩阵。所以 的列是 和 是特征向量。av[0]v[1]vvv[:,0]v[:,1]

你把代码写得好像是特征向量,但事实并非如此。v[0]v[1]

另外,我希望您知道您的代码(一旦被替换和 和 )才有效,因为是酉的,因此是 .v[0]v[1]v[:,0]v[:,1]vv⁻¹vᵀ

返回的一般方法是 . 你正在做的相当于 .这没关系,只要和是一回事。当是单一的时,就是这种情况。a[email protected](w)@np.linalg.inv(v)[email protected](w)@v.Tnp.linalg.inv(v)v.Tv

由于初始矩阵是对称的,因此我们知道它存在一组正交特征向量,一旦归一化,就会形成一个酉矩阵。所以,我们知道酉矩阵是可能的。av

因为你有 2 个不同的特征值,所以在维度 2 中,向量必须是正交的(每个子空间都是一条线;所以无论我们选择什么特征向量,它们都是我们已知存在的正交集的特征向量的共线)。因此,在对称的情况下,并且您具有与 的维数一样多的特征值,是正交的,并且是酉的,因为保证每个向量都是归一化的(范数 1)aaveig

但是,如果碰巧有双特征值,那么,我们所知道的是 CAN 可能是酉的,但不能保证这一点。aveig

例如,一个漫画示例,是唯一的特征值为 1。特征空间是整个空间。因此,任何由两个独立向量组成的都是有效的.当然,存在一些酉特征向量集(是显而易见的。事实上)是.但也存在其他非单一的,即使在正常化之后也是如此。例如,是另一组有效的特征向量,可以通过 (两者都是特征向量。它们构成了特征空间的有效基础。它们被规范化了)。A=Identityvv[1,0], [0,1]np.array([[1,0],[0,1]])@np.diag([1,1])@np.array([[1,0],[0,1]]).TA[1,0], [1/√2, 1/√2]eig

然而不是(是)。np.array([[1, 1/np.sqrt(2)], [0, 1/np.sqrt(2)]])@np.diag([1,1])@np.array([[1, 1/np.sqrt(2)], [0, 1/np.sqrt(2)]]).TAnp.array([[1, 1/np.sqrt(2)], [0, 1/np.sqrt(2)]])@np.diag([1,1])@np.linalg.inv(np.array([[1, 1/np.sqrt(2)], [0, 1/np.sqrt(2)]]))

所以,长话短说,在 dim 2 中,即使使用对称矩阵,您也不能保证它是酉的。数学告诉我们这是可能的。但不能保证。因此,您不知道(这是您计算的内容,代码较长)是否是 .avlinalg.eig[email protected](w)@v.Ta

另一方面,只能用于厄米特矩阵(因此,现实世界中的对称矩阵),保证它是酉的。eighv

所以tl;博士

  1. 您的代码假定 和 是特征向量。他们不是。 并且是。v[0]v[1]v[:,0]v[:,1]

  2. 一旦纠正了这一点,你的代码就等同于计算[email protected](w)@v.T

  3. 这与(等于 )是一回事,只有当是酉的。 并不能保证情况确实如此(即使对称,也有可能是这样)。因此,不能保证您的代码即使在更正后也能找回。即便如此,在您的情况下(更正后),它恰好起作用。a[email protected](w)@np.linalg.inv(v)veigaa

  4. eigh,它只适用于对称(厄米特)矩阵,就像你一样,确实保证了这一点。因此,请在代码中替换为。然后,你肯定知道(只要是对称的),是 .aeigeighaa_a