Numpy中e^(iθ)与cosθ+isinθ不匹配问题咨询
复数计算问题排查
问题背景
我查阅了相关公式(见附图),尝试将其应用于一组点列表。
正常运行的代码片段
以下代码运行结果符合预期:
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^{i\theta}$时未达到预期效果:
e_iVj = -1j * ((δj)/abs(δj)) assert(np.allclose(np.cos(np.angle(δj)) + np.sin(np.angle(δj)), e_iVj))
补充调整后的结果
按照@hpaulg的建议为sin添加1j后,数值匹配但符号仍不对应:
>>> 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确认:我已验证角度表示正确,且$\delta j/abs(\delta j)$等于$e^{i\vartheta}$,$abs(\delta j)/\delta j$等于$e^{-i\vartheta}$,因此怀疑原公式中的-i是笔误,请求确认。相关验证代码如下:
验证角度表示正确
-- 确认角度表示正确 >>> Zj= Zj[0] >>> Zj_p1 = Zj_p1[0] >>> δj = Zj_p1 - Zj >>> np.angle(δj, deg=True) 135.0 # 确认无误
验证$e^{i\vartheta} = \delta j/abs(\delta j)$
-- 验证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 # 确认两种方法结果一致
验证$e^{-i\vartheta} = abs(\delta j)/\delta j$
-- 验证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 # 确认两种方法结果一致
内容的提问来源于stack exchange,提问作者XYZ
相关产品推荐
相关产品推荐

