我的问题如下:使用scipy.linalg.eig获取特征向量和特征值我看到我的所有特征值都具有多重性1但是当我运行下面的代码时它并不确认特征向量是正交的,因为它们应该是在这种情况下。这会是什么原因?或者如何解决它?
import scipy as SP
import numpy as NP
from scipy import linalg
from numpy import linspace,asscalar,argsort
import cmath
import time
matA=SP.array([[-0.0001, 0., 0., 0.00001, 0., 0., 0.00002, 0.],[0., -0.0002, 0.,
0., 0., 0., 0., 0.],[0., 0., -0.00015, 0., 0., -9.*10**-6,
0., -0.00005],[0.00001, 0., 0., -0.0001, 0., 0.00001, 1.*10**-6,
0.],[0., 0., 0., -5.*10**-6, -0.0001, 0., 0., 0.],[0., -9.*10**-6,
0., 0.00001, 0., -0.0002, 0., 0.00005],[0., 0., 0., 0.00002, 0.,
0., -0.0001, 0.],[0., 0.00004, 0., 0., 0., 0.00005, 0., -0.00015]])
matB=SP.array([[0., 0., 0., 0., 0., 0., 0., 0.],[0., 0., 1.5*10**-10, 0., 0., 0.,
0., 0.],[0., -1.5*10**-10, 0., 0., 0., 0., 0., 0.],[0., 0., 0., 0.,
0., 0., 0., 0.],[0., 0., 0., 0., 0., 3.*10**-10, 0., 0.],[0., 0.,
0., 0., -3.*10**-10, 0., 2.*10**-10, 0.],[0., 0., 0., 0.,
0., -2.*10**-10, 0., 0.],[0., 0., 0., 0., 0., 0., 0., 0.]])
matdim=len(matB[0])
#coefficient matrix for original ODE
def matM(x):
return matA+(x**2)*matB
#define sorted eigensystem function
def eigsys(x):
evs,EVS=linalg.eig(matM(x),check_finite=False)
absevs=abs(evs)
idx=argsort(absevs)[::-1]
evs=evs[idx]
EVS=EVS[:,idx]
return (evs,EVS)
#check for orthogonality
eigvecs=SP.transpose(eigsys(60000)[1])
for j in range(8):
for i in range(8):
print SP.vdot(eigvecs[i],eigvecs[j])
#show eigenvalues all have multiplicity 1
print eigsys(60000)[0]
答案 0 :(得分:4)
他们为什么要正交?你的矩阵
a=matM(60000)
远非对称,
abs(a-a.T).max() -> 2.16
带
abs(a).max() -> 1.08
所以我不一定期望正交特征向量。函数matM
或数据matA
或matB
是否可能错误?
答案 1 :(得分:0)
与许多其他引用的一样,不同的特征值不能保证特征向量是正交的。
但是我们有2种特殊类型的矩阵 对称矩阵和厄米矩阵。
这里保证特征值是真实的,并且存在一组正交的特征向量(即使特征值不是唯一的)。
在numpy
中,
numpy.linalg.eig(any_matrix)
返回任何矩阵的特征值和特征向量(特征向量可能不正交)
并且我们具有内置功能来找到对称和Hermitian矩阵的正交特征向量。
eigen_values, eigen_vectors = numpy.linalg.eigh(symmetric_matrix)
注意:
numpy.linalg.eigh
仅考虑矩阵的上三角部分或下三角部分来计算特征值(对于这些特殊矩阵,一部分就像另一部分的镜像)。
因此,如果您传递既不是对称也不是Hermitian的矩阵来获取正交特征向量,它将使用该矩阵的下三角部分构造一个对称矩阵(实际上并不是为了我们的理解而构造的),并返回特征值和特征向量(它们是正交的!)。因此答案将是错误的!
有关更多详细信息,请参阅