Numpy e^i(theta) и тригонометрический cos(theta) + isin(theta) не совпадают

Я читаю,

Итак, я попытался применить это к списку точек, как показано ниже.

И ниже часть работает отлично, как и ожидалось.

Zj = np.array([1. +0.j , 0.5+0.5j, 0. +0.j , 0.5-0.5j, 1. +0.j ])
δj      = Zj[1: ] - Zj[:-1]
assert(np.allclose(δj, np.array([-.5+0.5j , -.5-.5j, 0.5-.5j, .5+.5j])))
assert(np.allclose(np.angle(δj, deg=True) , np.array([ 135., -135.,  -45.,   45.])))

Но когда я беру $e^{i\theta}$, это не работает должным образом.

e_iVj   = -1j * ((δj)/abs(δj))
assert(np.allclose(np.cos(np.angle(δj)) + np.sin(np.angle(δj)), e_iVj))

Обновлено:

Как предложил @hpalg, я добавил компонент 1j в sin. но все же это не совсем соответствует ссылке на знаки. Значения правильные

>>> np.cos(np.angle(δj)) + 1j* np.sin(np.angle(δj))
array([-0.70710678+0.70710678j, -0.70710678-0.70710678j,
        0.70710678-0.70710678j,  0.70710678+0.70710678j])
>>> e_iVj
array([ 0.70710678+0.70710678j, -0.70710678+0.70710678j,
       -0.70710678-0.70710678j,  0.70710678-0.70710678j])
>>> 1j * ((δj)/abs(δj))
array([-0.70710678-0.70710678j,  0.70710678-0.70710678j,
        0.70710678+0.70710678j, -0.70710678+0.70710678j])

@peterwhy

Не могли бы вы сообщить мне, правильно ли уравнение в первом фрагменте, как вы понимаете.

-- Confirming Angles are represented correctly
>>> Zj= Zj[0]
>>> Zj_p1 = Zj_p1[0]
>>> δj = Zj_p1 - Zj
>>> np.angle(δj, deg=True)
135.0 # Confirmed ok
-- Showing e^iϑ = δj/abs(δj)
>>> ϑ = np.angle(δj)
>>> e_iϑ = np.exp(1j*ϑ)
>>> e_iϑ
(-0.7071067811865475+0.7071067811865476j)

>>> δj/abs(δj)
(-0.7071067811865475+0.7071067811865475j)

>>> np.isclose(np.exp(1j*ϑ), δj/abs(δj))
True # confirmed both methods yield the same result
-- Showing e^-iϑ = abs(δj)/ δj
>>> np.exp(-1j*ϑ)
(-0.7071067811865475-0.7071067811865476j)

>>> abs(δj)/δj
(-0.7071067811865476-0.7071067811865476j)

>>> np.isclose(np.exp(-1j*ϑ), abs(δj)/δj)
True # confirmed both methods yield the same result

С неохотой я предполагаю, что здесь опечатка. Выше показано, что у меня есть с python, который указывает, что -i на самом деле не требуется. Не могли бы вы подтвердить ?

🤔 А знаете ли вы, что...
С Python можно создавать настольные приложения с использованием библиотеки Tkinter.


55
2

Ответы:

Вы не вычисляете e^(i*theta) или cos(theta)+i*sin(theta). Ваши выражения не имеют смысла.

Для угла theta вы бы вычислили e^(i*theta) следующим образом:

np.exp(1j*theta)

и вот как бы вы вычислили cos(theta)+i*sin(theta):

np.cos(theta) + 1j*np.sin(theta)

Решено

Вместо того, чтобы вычислять угол из np.angle(δj), найдите угол из любой

  • np.angle(-1j * δj) или
  • np.angle(e_iVj)

а затем передайте этот угол np.cos(...) + 1j * np.sin(...).

Это угол, который ваша формула использует в своей RHS, а не просто δj.

(Я пришел из связанного вопроса math.stackexchange)