【问题标题】:Find eigenvalues of Complex valued matrix in python在python中查找复值矩阵的特征值
【发布时间】:2016-09-07 09:08:06
【问题描述】:

我需要找到这个矩阵的特征值,以及类似的矩阵(空格表示分隔符):

[[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() 给出错误“无法将复数转换为浮点数”。

可能是什么原因,如何找到特征值?

【问题讨论】:

  • 请以可用的方式发布您的矩阵
  • 在文档 (docs.scipy.org/doc/numpy-1.10.1/reference/generated/…) 中明确指出 numpy.linalg.eigvalsh 仅适用于实数或厄米特矩阵。你的很复杂。为什么它应该起作用?您必须按照@Glostas 下面建议的方式进行操作
  • 这是一个赫米亚矩阵。
  • @AdityaVijaykumar 因此,如果您尝试像此处(docs.scipy.org/doc/numpy/reference/generated/…)那样计算其共轭转置并测试两者是否相等,您将得到True 回来吗?对角线必须是真实的才能成为厄米特
  • 在将奇怪的I 转换为python 复杂1j 并将其全部放入np.ndarray 之后,我在您的数据上使用np.linalg.eigvalsh 没有问题。发布完整的代码,因为您的输入似乎有问题。是的,上面的矩阵厄米特的。

标签: python numpy matrix linear-algebra eigenvalue


【解决方案1】:

正如不止一位评论者所解释的,您的矩阵适用于 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]

【讨论】:

    【解决方案2】:

    在 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)
    

    【讨论】:

    • 这不是问题的答案。问题是为什么eigvalsh 会生成错误消息。
    • 问题是“可能是什么原因,如何找到特征值?”。这给出了特征值...
    猜你喜欢
    • 1970-01-01
    • 2017-10-21
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多