如何强制 sympy 处理复数的简化?

问题描述 投票:0回答:1

我对 sympy 很陌生,我尝试进行矩阵乘法。矩阵很复杂。

这是代码

import sympy as sp

eps = sp.exp(2 * sp.pi * sp.I / 6)

eps_star = sp.conjugate(eps)

M = 1 / sp.sqrt(6) * sp.Matrix([
    [1, 1, 1, 1, 1, 1],
    [1, eps_star, -eps, -1, -eps_star, eps],
    [1, -eps, -eps_star, 1, -eps, -eps_star],
    [1, eps, -eps_star, -1, -eps, eps_star],
    [1, -eps_star, -eps, 1, -eps_star, -eps],
    [1, -1, 1, -1, 1, -1]
]).transpose()

Minv = sp.conjugate(M).transpose()

如果您计算乘积

M * Minv
应该给出单位矩阵,您会在对角线上得到 1,但非对角线项不为零。

例如你得到

1/3 -1/3 eps - 1/3 eps_star

这实际上为零,因为它简化为

1/3 - 1/3 [2 cos (pi / 3)] = 1/3 - 1/3 = 0
。我尝试应用
simplify
nsimplify
方法,但它没有给我零。也许是由于浮动错误问题。

有没有一种方法可以使用 sympy 来管理此问题,而无需使用您知道哪个项为零的事实。

在我的例子中,这个矩阵实际上用于从一个基切换到另一个基,其中运算符是对角的。最后,我想要计算的乘积是

Minv * H * M
。就目前的问题而言,不可能看到结果是对角线的。

python matrix sympy complex-numbers
1个回答
0
投票

你可以用三角函数重写

exp
,那么它会自动简化结果:

(M*Minv).rewrite(sp.cos)
© www.soinside.com 2019 - 2024. All rights reserved.