обратная тригонометрия python (в частности, arcsin)
-
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
если уж на то пошло.Просто будь осторожен.