обратная тригонометрия питона (в частности, арксинус) - PullRequest
2 голосов
/ 23 апреля 2009

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

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

a = sin (2)
b = asin (a)
b не = 2

но

a = cos (2)
b = acos (a)
b DOES = 2

Потому что у = грех (х) повторяется функция, существует более одного значения х для каждого значения у. т.е. грех (2) = грех (1,14) = 0,909

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

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

Ответы [ 3 ]

5 голосов
/ 23 апреля 2009

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

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

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

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

2 голосов
/ 23 апреля 2009

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

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

1 голос
/ 23 апреля 2009

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

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

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

a == asin(sin(a))

или

a == (a / b) * b

по этому вопросу. Просто будь осторожен.

...