sympy中带符号的复矩阵对角化

Diagonalization of complex matrix with symbols in sympy

我尝试通过 sympy 对带有符号的复杂矩阵进行对角化,如下所示;

from sympy import *
a, b, c = symbols('a b c', real=True)
m = Matrix([[a, I * b], [-I * b, c]])
m.eigenvects()

矩阵是 Hermitian 矩阵,因此它必须可对角化,但最后一行失败

NotInvertible: zero divisor

我检查了没有 sympy.I 或没有符号的矩阵的对角化成功。 (作为一种解决方法,似乎使用另一个非实数符号,比如 j,而不是 sympy.I,是可行的。) 是否不支持带有显式 sympy.I 符号的对角化,或者我的代码有问题?

我在 jupyter 上使用 sympy 及其最新的官方 docker 图像 (jupyter/datascience-notebook)。 sympy的版本是1.8.

这是 sympy 1.8 中的错误。它已经为即将发布的 1.9 修复。事实上,您可以使用 pip install --pre -U sympy 安装 1.9rc1。然后你应该看到:

   ...: a, b, c = symbols('a b c', real=True)
   ...: m = Matrix([[a, I * b], [-I * b, c]])
   ...: m.eigenvects()
Out[1]: 
⎡⎛                                        ⎡⎡          ⎛           ________________________⎞⎤⎤⎞  ⎛  
⎢⎜           ________________________     ⎢⎢          ⎜          ╱  2              2    2 ⎟⎥⎥⎟  ⎜  
⎢⎜          ╱  2              2    2      ⎢⎢          ⎜a   c   ╲╱  a  - 2⋅a⋅c + 4⋅b  + c  ⎟⎥⎥⎟  ⎜  
⎢⎜a   c   ╲╱  a  - 2⋅a⋅c + 4⋅b  + c       ⎢⎢        ⅈ⋅⎜─ + ─ - ───────────────────────────⎟⎥⎥⎟  ⎜a 
⎢⎜─ + ─ - ───────────────────────────, 1, ⎢⎢  ⅈ⋅c     ⎝2   2                2             ⎠⎥⎥⎟, ⎜─ 
⎢⎜2   2                2                  ⎢⎢- ─── + ───────────────────────────────────────⎥⎥⎟  ⎜2 
⎢⎜                                        ⎢⎢   b                       b                   ⎥⎥⎟  ⎜  
⎢⎜                                        ⎢⎢                                               ⎥⎥⎟  ⎜  
⎣⎝                                        ⎣⎣                       1                       ⎦⎦⎠  ⎝  

                                      ⎡⎡          ⎛           ________________________⎞⎤⎤⎞⎤
         ________________________     ⎢⎢          ⎜          ╱  2              2    2 ⎟⎥⎥⎟⎥
        ╱  2              2    2      ⎢⎢          ⎜a   c   ╲╱  a  - 2⋅a⋅c + 4⋅b  + c  ⎟⎥⎥⎟⎥
  c   ╲╱  a  - 2⋅a⋅c + 4⋅b  + c       ⎢⎢        ⅈ⋅⎜─ + ─ + ───────────────────────────⎟⎥⎥⎟⎥
+ ─ + ───────────────────────────, 1, ⎢⎢  ⅈ⋅c     ⎝2   2                2             ⎠⎥⎥⎟⎥
  2                2                  ⎢⎢- ─── + ───────────────────────────────────────⎥⎥⎟⎥
                                      ⎢⎢   b                       b                   ⎥⎥⎟⎥
                                      ⎢⎢                                               ⎥⎥⎟⎥
                                      ⎣⎣                       1                       ⎦⎦⎠⎦