簡體   English   中英

numpy 的“linalg.eig()”和“linalg.eigh()”用於同一個厄密矩陣

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM