2

我要死在这里了。所以我有一个复数(-4.9991 + 15.2631i)。在matlab中,如果我这样做

angle(-4.9991 + 15.2631i) = 1.8873

我认为这个角度基本上是这样计算的

atan(15.2631/-4.9991) = -1.2543

为什么这些不同?我需要编写计算复数角度的 ac 函数。我这样做了:

#define angle(x) (atan((GSL_IMAG(x)/GSL_REAL(x))))

但这种方式给了我 -1.2543 的答案,而不是 1.8873 的答案。我究竟做错了什么?

4

2 回答 2

6
-1.2543 + Pi(radians) = 1.8873 (with rounding)

正如其他人指出的,使用atan2()

于 2013-05-17T04:11:51.873 回答
3

虽然 usingatan2解决了问题,但实际问题尚未得到解答:

为什么这些不同?

您错过了正切函数是周期性的,周期 pi = 3.141592... 因此,当您编写时,z = atan(y/x)您期望一个z这样的tan(z) = y/x数字,但是有无限个这样的数字,因为tan(z + pi) = tan(z)。当然,您只会得到这些无限值中的一个:最接近于零的值,这不是您一直需要的值。

特别要注意,由于您正在计算商 Im/Re,因此无法区分与 -Im/-Re 的区别,即两个分量上的减号不会改变商,但它是相反的复数 (这同样适用于二维向量)。就是这样atan2做的angle:他们分别检查每个组件的符号,然后确定是否应该将 +/- pi 添加到atan.

于 2014-03-20T14:41:13.027 回答