обратная тригонометрия python (в частности, arcsin)

StackOverflow https://stackoverflow.com/questions/782418

  •  13-09-2019
  •  | 
  •  

Вопрос

В настоящее время я пытаюсь запустить что-нибудь, связанное с тригонометрией, но я столкнулся с заминкой, связанной с функцией math.asin (это также применимо к acos и atan, но в этих случаях это меньше влияет на то, что я пытаюсь сделать).Проблему лучше всего подытожить в двух сообщениях из справочной ветки, которые я нашел об этом в другом месте;

Извините, я только что попробовал еще раз и обнаружил, что

a = sin(2)
b = asin(a)
b не имеет значения = 2

но

a = cos(2)
b = acos(a)
b ДЕЛАЕТ = 2

Поскольку y = sin(x) является повторяющейся функцией, для каждого значения y существует более одного значения из x.т.е. sin(2) = sin(1.14) = 0.909

Следовательно, когда вы выполняете x = asin(y), вы получите значение только между -PI / 2 <= x <= Число ПИ/2

Я математически понимаю, почему это так, но мне было интересно, может ли кто-нибудь помочь мне найти все решения в пределах диапазона, а не только то, которое оно выдает автоматически.Спасибо =]

Это было полезно?

Решение

Давайте рассмотрим диапазон [0, 2π).

Для acos, каждое значение x также имеет другое возможное значение при 2π - x.(Представьте себе график косинусов, и вы его увидите.)

Для asin, каждое положительное значение x имеет другое возможное значение при π - x;каждое отрицательное значение имеет возможное значение в 3π - x.

Не стесняйтесь рисовать дополнительные графики для обобщения на более широкие диапазоны.:-)

Другие советы

Все решения для acrsin(a) будут:

b, pi - b, 2pi + b, 2pi + (pi - b) и т.д.

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

Тем не менее, я просто хотел отметить, что, ожидая, что смогу получить точный тот же результат при обратной операции с плавающей запятой, вероятно, завершится неудачей из-за более общего Проблема точности с плавающей запятой

С плавающей запятой вы можете не гарантирую, что

a == asin(sin(a))

или

a == (a / b) * b

если уж на то пошло.Просто будь осторожен.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top