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
相关产品推荐
相关产品推荐

