Симпатичная точка Python с сопряжением, не совпадающим с квадратом нормы

#python #sympy #simplify

#python #симпатия #упростить

Вопрос:

Почему 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
  

выдает false. Есть ли какой-то другой способ обойти эту проблему, другой способ определить внутренний продукт, который ведет себя правильно. Я выполняю некоторые сложные физические вычисления для своей диссертации, и мне бы очень хотелось проверить свои результаты с помощью sympy.

PS. Я использую sympy version 1.4dev .


Редактировать: я думаю, проблема в том, что simplify не осознает, что

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

Если я заменю это в $n_normal$ его абсолютным значением, это сработает. Я думаю, странно, что функция norm делает это правильно, а упрощение того, что по сути должно быть нормой, — нет.

Комментарии:

1. Я также пробовал это с помощью метода (n_normal.dot(n_normal.H)).equals(1). К сожалению, это также выдает false .