Python Симпо точка с конъюгатом, не равным норме - PullRequest
0 голосов
/ 04 марта 2019

Почему sympy дает false на втором логическом значении?Это правильно дает истину на первом логическом.Я думал, что эта последняя строка будет определением нормы.

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.Есть ли другой способ обойти эту проблему, другой способ определить внутренний продукт, который ведет себя правильно.Я делаю некоторые сложные физические расчеты для моей диссертации, и я действительно хотел бы проверить свои результаты с симпози.

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


Редактировать : Я думаю, что проблема в том, что упрощение не понимает, что

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

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

...