为什么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的简化却没有这样做是很奇怪的。