私はPythonの二次微分行列の固有ベクトルを計算したいと思います。数学によると、最初のベクトルは0とπの間のsin関数に等しく、2番目のベクトルは0と2 *πの間の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
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()
機能付き