我需要找到这个矩阵的特征值,以及类似的矩阵(空格表示分隔符):
[[1.0000 -0.7071*I 0 -0.7071*I 0 0 0 0 0]
[0.7071*I 0.5000 -0.7071*I 0 -0.70710*I 0 0 0 0]
[0 0.7071*I 1.0000 0 0 -0.7071*I 0 0 0]
[0.7071*I 0 0 0.5000 -0.7071*I 0 -0.7071*I 0 0]
[0 0.7071*I 0 0.7071*I 0 -0.7071*I 0 -0.7071*I 0]
[0 0 0.7071*I 0 0.7071*I 0.5000 0 0 -0.7071*I]
[0 0 0 0.7071*I 0 0 1.0000 -0.7071*I 0]
[0 0 0 0 0.7071*I 0 0.7071*I 0.5000 -0.7071*I]
[0 0 0 0 0 0.7071*I 0 0.7071*I 1.000]]
错误:numpy.linalg.eigvalsh()
给出错误"can't convert complex to float"
原因是什么,我如何找到特征值?
正如不止一个评论者所解释的那样,您的矩阵在eigvalsh
中工作得很好。
import numpy as np
from numpy.linalg import eigvalsh
I = 1j
arr = np.array([[1.0000, -0.7071*I, 0, -0.7071*I, 0, 0, 0, 0, 0],
[0.7071*I, 0.5000, -0.7071*I, 0, -0.70710*I, 0, 0, 0, 0],
[0, 0.7071*I, 1.0000, 0, 0, -0.7071*I, 0, 0, 0],
[0.7071*I, 0, 0, 0.5000, -0.7071*I, 0, -0.7071*I, 0, 0],
[0, 0.7071*I, 0, 0.7071*I, 0, -0.7071*I, 0, -0.7071*I, 0],
[0, 0, 0.7071*I, 0, 0.7071*I, 0.5000, 0, 0, -0.7071*I],
[0, 0, 0, 0.7071*I, 0, 0, 1.0000, -0.7071*I, 0],
[0, 0, 0, 0, 0.7071*I, 0, 0.7071*I, 0.5000, -0.7071*I],
[0, 0, 0, 0, 0, 0.7071*I, 0, 0.7071*I, 1.000]])
# Ensure hermitian
assert(np.all(0 == (arr - np.conj(arr.T))))
print(eigvalsh(arr))
# outputs:
# [-1.56153421 -0.2807671 -0.2807671 0.5 0.5 1. 1.7807671 1.7807671 2.56153421]
在numpy中您可以免费获得
import numpy as np
matrix = np.array([[1+1j,0+1j],[0+1j,1+1j]])
eingenvalues,eigenvectors=np.linalg.eig(matrix)
会给你两个特征值和对应的特征向量
如果你真的只对特征值感兴趣,你可以使用
eingenvalues=np.linalg.eigvals(matrix)