Python 具有适当符号的Numpy-eigh函数
我想用python计算二阶导数矩阵的特征向量。根据数学,第一个向量应该等于0和π之间的sin函数,第二个向量应该等于0和2*pi之间的sin函数。因此,我的代码看起来像Python 具有适当符号的Numpy-eigh函数,python,numpy,eigenvector,Python,Numpy,Eigenvector,我想用python计算二阶导数矩阵的特征向量。根据数学,第一个向量应该等于0和π之间的sin函数,第二个向量应该等于0和2*pi之间的sin函数。因此,我的代码看起来像 import numpy as np from matplotlib import pyplot as plt from scipy import sparse import scipy.integrate as integrate import scipy.special as special import scipy de
import numpy as np
from matplotlib import pyplot as plt
from scipy import sparse
import scipy.integrate as integrate
import scipy.special as special
import scipy
def create_second_deriv(size, h):
delta_matrix_2_second_diff = (np.eye(size, dtype=np.float)*-2+np.eye(size, k=-1,dtype=np.float)*1+np.eye(size, k=1,dtype=np.float)*1)
delta_matrix_2_second_diff /= (h*h)
return -1*delta_matrix_2_second_diff
delta_x = 0.001
x = np.linspace(0, 1, (int)(1/delta_x))
delta_matrix = create_second_deriv(len(x), delta_x)
w, v = scipy.linalg.eigh(delta_matrix)
plt.plot(v.tolist()[0])
plt.show()
plt.plot(v.tolist()[1])
plt.show()
现在,我得到的输出是
作为第一个特征向量的绘图,以及
作为第二个特征向量的绘图。我已经知道不同值的符号是任意的,但在我的例子中,它们对于以后的处理很重要。是否有办法“翻转”符号,使结果值大致等于预期函数?在这种情况下,简单地使用abs()
-函数没有帮助。使用scipy.linalg.eigh()
函数:
不过,使用eigh()
例程获取特征值时要非常小心。
里面埋着一个“抓住你了”
语法是:
(eigenvalues, eigenvectors) = eigh(matrix)
这将返回一个特征值数组和一个二维特征向量数组
(每个特征向量由许多分量组成)
还有一个问题。假设您想要n
th特征值和
特征向量。我会写:
eigenvalues[n]
eigenvectors[n]
那我就大错特错了。特征向量和特征值是
共享一个索引,但特征向量上的索引是第二列:
eigenvectors[:,n]
因此,代码的最后四行必须更改为:
plt.plot(v[:,0])
plt.show()
plt.plot(v[:,1])
plt.show()