Python atan o atan2, ¿qué debo usar?

Mi fórmula f = arctan (ImZ / ReZ)

Hay dos opciones:

Opción 1 (atan):

ImZ=-4.593172163003 ImR=-4.297336384845 >>> z=y/x >>> f1=math.atan(z) >>> f1 0.8186613519278327 

Opción 2 (atan2)

 >>> f=math.atan2(y,x) >>> f -2.3229313016619604 

¿Por qué estos dos resultados son diferentes?

Atan toma un solo argumento y Atan2 toma dos argumentos. El propósito de usar dos argumentos en lugar de uno es recostackr información sobre los signos de las entradas para devolver el cuadrante apropiado del ángulo calculado, que no es posible para el argumento único Un bronceado

introduzca la descripción de la imagen aquí

El resultado de Atan2 es siempre entre -pi y pi.

Referencia: https://en.wikipedia.org/wiki/Atan2

cadena de documentación para math.atan:

atan (x) Devuelve la tangente del arco (medida en radianes) de x.

cadena de documentación para math.atan2:

atan2 (y, x) Devuelve la tangente de arco (medida en radianes) de y / x. A diferencia de atan (y / x), se consideran los signos tanto de x como de y.

Para ser muy completo, esto es lo que dice el documento sobre atan2:

math.atan2 (y, x) Devuelve atan (y / x), en radianes. El resultado es entre -pi y pi. El vector en el plano desde el origen hasta el punto (x, y) hace que este ángulo con el eje X positivo. El punto de atan2 () es que conocemos los signos de ambas entradas, por lo que puede calcular el cuadrante correcto para el ángulo. Por ejemplo, atan (1) y atan2 (1, 1) son ambos pi / 4, pero atan2 (-1, -1) es -3 * pi / 4.

Así que está bastante claro: las salidas son diferentes debido a los signos de ImZ y ImR . atan2 devuelve el cuadrante apropiado, a diferencia de atan .

Una fórmula para tener un ángulo en sentido contrario a las agujas del reloj desde 0, que es el eje positivo de x,

a 2pi para cualquier valor de x e y. Para x = y = 0, el resultado no está definido.

f (x, y) = pi () – pi () / 2 * (1 + signo (x)) * (1 signo (y ^ 2)) – pi () / 4 * (2 + signo (x) ) * signo (y)

  -sign(x*y)*atan((abs(x)-abs(y))/(abs(x)+abs(y)))