我对 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
。就目前的问题而言,不可能看到结果是对角线的。
你可以用三角函数重写
exp
,那么它会自动简化结果:
(M*Minv).rewrite(sp.cos)