Арктангенс тангенса x точно не вычислен - PullRequest
2 голосов
/ 10 июля 2019

Мне нужны функции касательной, арктангенс для моей программы на Python.Я пробовал np.arctan и np.tan, но наблюдал странное поведение.В принципе, арктангенсом некоторого числа является само число, но приведенный ниже код не дает точного значения.

import numpy as np
x = 10
print(np.arctan(np.tan(x)))

Когда я изменяю x на 2 * x или 3 * x, результат становится еще более неточным.Я пробовал math.tan, math.atan, но результат был таким же.

Может кто-нибудь объяснить, почему это происходит (какая из двух функций неправильная) и при каких условиях следует соблюдать осторожность при использовании функций арктангенса и тангенса?

1 Ответ

5 голосов
/ 10 июля 2019

три вещи на заметку:

  1. в python (как и во всех языках программирования, на которые я когда-либо смотрел) тригонометрические функции работают с углами в радианах , т.е. диапазон [0, 2*pi) представляет «полный круг»
  2. tan является периодическим: tan(x) = tan(pi + x) (еще раз обратите внимание, что это в радианах; в питоне tan(x) = tan(180 + x) не будет истинным!).
  3. arctan возвращает значение в [-pi/2, pi/2).

в вашем примере вы вернетесь к правильному результату в [-pi/2, pi/2):

import numpy as np

x = 10
print(np.arctan(np.tan(x)))  # 0.575222039231
print(10 % (np.pi / 2))      # 0.5752220392306207

ваша функция np.arctan(np.tan(x)) эквивалентна (вычислительно дешевле)

def arctan_tan(x):
    ret = x % np.pi
    if ret > np.pi / 2:
        ret -= np.pi
    return ret
...