[英]numpy's "linalg.eig()" and "linalg.eigh()" for the same hermitian matrix
這個問題是由於一個誤解。 請參閱下面的答案。
numpy.linalg 方法 eig() 和 eigh() 似乎為同一厄米矩陣返回不同的特征向量。 這里的代碼:
import numpy as np
H = [[0.6 , -1j, 0], [1j, 0.4, 0], [0, 0, -1]]
evals, evects = np.linalg.eig(H)
print('\nOutput of the eig function')
for i in range(0,3):
print('evect for eval=',evals[i],'\n',evects[i,0],'\n',evects[i][1],'\n',evects[i][2])
evals, evects = np.linalg.eigh(H)
print('\nOutput of the eigh function')
for i in range(0,3):
print('evect for eval=',evals[i],'\n',evects[i,0],'\n',evects[i][1],'\n',evects[i][2])
發布此內容以幫助可能與我有同樣誤解的任何人:
特征向量是兩個函數的結果矩陣的列。 錯誤出在原始代碼中,它從特征向量矩陣中提取行而不是列。 正確的代碼如下。
H = [[0.6 , -1j, 0], [1j, 0.4, 0], [0, 0, -1]]
evals, evects = np.linalg.eig(H)
print('\nOutput of the eig function')
for i in range(0,3):
print('evect for eval=',evals[i],'\n',evects.T[i,0],'\n',evects.T[i][1],'\n',evects.T[i][2])
evals, evects = np.linalg.eigh(H)
print('\nOutput of the eigh function')
for i in range(0,3):
print('evect for eval=',evals[i],'\n',evects.T[i,0],'\n',evects.T[i][1],'\n',evects.T[i][2])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.