Python 对角化符号矩阵

Python 对角化符号矩阵,python,numpy,matrix,sympy,diagonal,Python,Numpy,Matrix,Sympy,Diagonal,我需要用python对符号矩阵进行对角化。在Mathematica中,这很容易完成,但是当使用模块numpy.linalg时,我会遇到问题 混凝土,考虑矩阵 [[2, x], [x, 3]] 其中,x是一个符号变量。我想我会遇到问题,因为numpy软件包是为数值计算而提供的,不是符号的,但我找不到如何使用Symphy进行计算。假设矩阵是可对角化的,你可以通过 from sympy import * x = Symbol('x') M = Matrix([[2,x],[x,3]]) print

我需要用python对符号矩阵进行对角化。在Mathematica中,这很容易完成,但是当使用模块
numpy.linalg
时,我会遇到问题

混凝土,考虑矩阵

[[2, x], [x, 3]]

其中,
x
是一个符号变量。我想我会遇到问题,因为numpy软件包是为数值计算而提供的,不是符号的,但我找不到如何使用Symphy进行计算。

假设矩阵是可对角化的,你可以通过

from sympy import *
x = Symbol('x')
M = Matrix([[2,x],[x,3]])
print M.eigenvects()
print M.eigenvals()
给予:

[(-sqrt(4*x**2 + 1)/2 + 5/2, 1, [[-x/(sqrt(4*x**2 + 1)/2 - 1/2)]
[                            1]]), (sqrt(4*x**2 + 1)/2 + 5/2, 1, [[-x/(-sqrt(4*x**2 + 1)/2 - 1/2)]
[                             1]])]
{sqrt(4*x**2 + 1)/2 + 5/2: 1, -sqrt(4*x**2 + 1)/2 + 5/2: 1}
您应该查看,这里列出了许多其他分解


请注意,并非每个矩阵都是可对角化的,但您可以使用sympy命令将每个矩阵放入。jordan_form

您可以从特征值计算它,但实际上有一种方法可以为您做到这一点

M.diagonalize()
返回一对矩阵
(p,D)
,使得
M=p*D*p**-1
。如果由于矩阵不可对角化或由于
solve()
找不到特征多项式的所有根,它不能计算足够的特征值,它将提高
MatrixError


另请参见Symphy教程的第页。

如果创建
x=symphy.Symbol('x')
,然后将numpy矩阵初始化为
a=np.array([[2,x],[x,3]])
?@由于numpy无法安全地将类型强制为它可以处理的类型,因此失败。矩阵([[2,x],[x,3]])。对角化()应该足够了。不要为此使用numpy,即使使用
dtype=object
@Krastanov,数值算法也完全不适合用于符号计算,你能解释一下为什么我使用矩阵([[2,x],[x,3]])得到两个矩阵。对角化()?第二个是正确的,但不知道第一个。感谢you@dapias看到我的答案了。谢谢你,胡克,但现在我很困惑,如果矩阵是2x2,为什么我们得到了特征向量的三个分量。假设特征向量的维数不能大于矩阵的维数。你认为呢?你链接到了一个过时版本的文档。将url中的版本替换为“最新”以获得最新版本。@Asmurer已修复,谢谢,我不知道这一点。这是否特定于它正在运行的后端,即这是否适用于其他站点?@dapias来自文档:返回三个值“三元组列表(特征值、多重性、基础)”。如果你只对对对角化感兴趣,阿斯穆勒的答案更好(但要注意乔丹范式!)。胡克不,这是Symphy文档实现的东西。后端只是承载在github页面上的文件。
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⎦⎠