带有共轭的Python Sympy点与范数平方不相同

时间:2019-03-03 23:04:53

标签: python sympy simplify

为什么sympy在第二个布尔值上给出false?在第一个布尔值上正确给出了true。我以为最后一行将是规范的定义。

from sympy import *

eta_1, eta_2, m = 1, 1, 3

theta_1, theta_2 = symbols("theta_1 theta_2", real=True)
sigma_x = Matrix([[0, 1], [1, 0]])
sigma_y = Matrix([[0, -I], [I, 0]])
sigma_z = Matrix([[1, 0], [0, -1]])

H = eta_1*sin(theta_1)*sigma_x + eta_2*sin(theta_2)*sigma_y + (m-eta_1*cos(theta_1)-eta_2*cos(theta_2))*sigma_z

v = H.eigenvects()
l = v[0][0]
v = v[0][2][0]

n_normal = v/v.norm()
print(simplify(n_normal.norm()**2) == 1)
print(simplify(n_normal.dot(n_normal.H)))
print(simplify(n_normal.dot(n_normal.H)) == 1)

我认为这与sympy失败有关

simplify(abs(x**2)-x*conjugate(x))==0

给出了错误。还有其他方法可以解决此问题,另一种方法可以定义行为正确的内部产品。我正在为论文做一些复杂的物理计算,我真的很想用sympy检查结果。

PS 。我正在使用sympy version 1.4dev


编辑:我认为问题在于简化并没有意识到这一点

$2*\cos(\theta_1)*cos(\theta_2) - 6*\cos(\theta_1) - 6*\cos(\theta_2) + 11>0\:.$

如果我将$n_normal$中的它替换为其绝对值,它将起作用。我认为norm函数正确地执行此操作而简化本质上应为norm的简化却没有这样做是很奇怪的。

0 个答案:

没有答案