【发布时间】:2014-08-21 15:46:18
【问题描述】:
我的问题如下:使用 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]
【问题讨论】:
标签: python numpy eigenvector