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

Google Colab计算矩阵Jordan标准形超时失败问题求助

解决Sympy计算范德蒙德矩阵Jordan标准形超时的问题

你的矩阵是4阶范德蒙德矩阵,行列式非零,所有特征值互异,因此它的Jordan标准形本质是对角矩阵,对角线元素为矩阵的特征值。Sympy计算超时的核心原因是其默认的jordan_form方法采用精确符号计算路径,会尝试求解特征多项式的精确根式解,而4次多项式的精确根推导过程复杂,导致耗时过长;Matlab、WolframAlpha则默认使用数值近似算法,跳过了复杂的符号推导,因此能快速得到结果。

解决方案

1. 利用矩阵性质直接构造Jordan标准形

既然矩阵特征值互异,Jordan标准形就是对角化后的矩阵,可直接通过特征值构造:

import numpy as np
from sympy import Matrix, diag

a = np.array([[1, 2, 4, 8], [1, 3, 9, 27], [1, 4, 16, 64], [1, 5, 25, 125]])
m = Matrix(a)
# 获取所有互异特征值
eigen_vals = list(m.eigenvals().keys())
# 构造对角Jordan矩阵
J = diag(*eigen_vals)
# 转换为数值近似结果(避免过长的符号表达式)
print(J.evalf())

2. 切换为数值矩阵计算

将矩阵转换为浮点数类型,强制Sympy使用数值计算路径:

import numpy as np
from sympy import Matrix

a = np.array([[1, 2, 4, 8], [1, 3, 9, 27], [1, 4, 16, 64], [1, 5, 25, 125]], dtype=np.float64)
m = Matrix(a)
P, J = m.jordan_form()
print(J)

3. 用Numpy数值方法替代

如果不需要精确符号结果,直接用Numpy求解特征值并构造对角矩阵:

import numpy as np

a = np.array([[1, 2, 4, 8], [1, 3, 9, 27], [1, 4, 16, 64], [1, 5, 25, 125]])
eigen_vals = np.linalg.eigvals(a)
# 构造Jordan标准形(对角矩阵)
J = np.diag(eigen_vals)
print(J)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:20:46