You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sympy对含sympy.I的符号复矩阵对角化出现NotInvertible报错如何解决

问题结论

你的代码不存在逻辑错误,这是SymPy 1.8版本的已知缺陷:该版本在计算带内置sympy.I的符号厄米矩阵的特征向量时,内部代数化简流程会误将非零表达式判定为零除数,进而抛出NotInvertible错误。你测试的自定义非实数符号替代sympy.I的方法可以绕开该问题,是因为自定义符号不会触发SymPy针对内置虚数单位的特殊化简分支。

解决方案
  • 升级SymPy版本:该缺陷在SymPy 1.9及后续版本中已被修复,升级后直接运行原有代码即可正常输出特征向量结果。
  • 自定义符号替换后回代:你可以沿用当前测试有效的方案,先使用自定义非实数符号参与计算,得到结果后再替换为标准sympy.I,参考代码如下:
from sympy import *
a, b, c = symbols('a b c', real=True)
j = symbols('j')
m = Matrix([[a, j * b], [-j * b, c]])
eig_result = m.eigenvects()
# 将自定义符号替换回标准虚数单位
processed_eig = [
    (eig_val.subs(j, I), mult, [vec.subs(j, I) for vec in eig_vecs])
    for eig_val, mult, eig_vecs in eig_result
]
  • 分步计算避开缺陷:你也可以先调用eigenvals()方法得到所有特征值,再对每个特征值手动求解齐次线性方程组得到对应的特征向量,绕开eigenvects()方法的问题逻辑。

内容的提问来源于stack exchange,提问作者hfukuda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:48:04