我需要用 python 对角化一个符号矩阵。在 Mathematica 中这可以很容易地完成,但是当使用模块时numpy.linalg
我遇到问题。
为了具体起见,请考虑矩阵
[[2, x], [x, 3]]
where x
是一个符号变量。我想我遇到了问题,因为 numpy 包是为数值计算提供的,而不是符号计算,但我找不到如何使用 sympy 进行计算。
您可以根据特征值计算它,但实际上有一种方法可以为您做到这一点,diagonalize http://docs.sympy.org/latest/modules/matrices/matrices.html#sympy.matrices.matrices.MatrixBase.diagonalize
In [13]: M.diagonalize()
Out[13]:
⎛ ⎡ __________ ⎤⎞
⎜ ⎢ ╱ 2 ⎥⎟
⎜⎡ -2⋅x 2⋅x ⎤ ⎢ ╲╱ 4⋅x + 1 5 ⎥⎟
⎜⎢───────────────── ─────────────────⎥, ⎢- ───────────── + ─ 0 ⎥⎟
⎜⎢ __________ __________ ⎥ ⎢ 2 2 ⎥⎟
⎜⎢ ╱ 2 ╱ 2 ⎥ ⎢ ⎥⎟
⎜⎢╲╱ 4⋅x + 1 - 1 ╲╱ 4⋅x + 1 + 1⎥ ⎢ __________ ⎥⎟
⎜⎢ ⎥ ⎢ ╱ 2 ⎥⎟
⎜⎣ 1 1 ⎦ ⎢ ╲╱ 4⋅x + 1 5⎥⎟
⎜ ⎢ 0 ───────────── + ─⎥⎟
⎝ ⎣ 2 2⎦⎠
M.diagonalize()
返回一对矩阵(P, D)
这样M = P*D*P**-1
。如果它无法计算足够的特征值,要么是因为矩阵不可对角化,要么是因为solve()
无法找到特征多项式的所有根,它会提出MatrixError
.
也可以看看本节 http://docs.sympy.org/latest/tutorial/matrices.html#eigenvalues-eigenvectors-and-diagonalizationSymPy 教程的一部分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)