Реализация тригонометрических обратных функций в c #

Я пытаюсь реализовать обратные тригонометрические функции в приложении C #. Очевидно, я не говорю о простых обратных sin, cos и tan, поскольку все они предоставляются классом Math. Я ищу инверсии для sec, cosec и cotan:

Func<double,double> secant = (d => (1 / Math.Cos(d)));
Func<double,double> cosecant = (d => (1 / Math.Sin(d)));
Func<double,double> cotangent = (d => (Math.Cos(d) / Math.Sin(d)));

Теперь моя проблема в том, что я хочу реализовать инверсии каждого из них, но я не могу найти простого определения соответствующих инверсий - arcsec, arccsc и arccot ​​- которые я могу превратить в код C #.

Итак, мой вопрос: можете ли вы (а) указать мне на хороший ресурс или (б) показать мне пример кода для этого?


person RobV    schedule 06.01.2010    source источник
comment
Вы проверили MathWorld на предмет формул для нужных вам обратных величин?   -  person High Performance Mark    schedule 06.01.2010
comment
В зависимости от ваших потребностей вам может не потребоваться серьезная математика для этого, поэтому вам не нужно «определение»; вам нужно только подготовить таблицу поиска.   -  person Tamas Czinege    schedule 06.01.2010
comment
Я провел некоторое время в Википедии, формулы, которые только что опубликовал Крис, неочевидны на ‹en.wikipedia.org/ wiki / Trigonometric_functions ›если они там вообще есть   -  person RobV    schedule 06.01.2010
comment
Я просто перевел их в обратном направлении от ваших формул для sec, csc и cot.   -  person Chris Jester-Young    schedule 06.01.2010
comment
Я чувствую себя глупо из-за того, что не применяю основную алгебру :-(   -  person RobV    schedule 07.01.2010
comment
+1 за уравновешивание голосов против хорошего вопроса.   -  person Alexandre C.    schedule 18.09.2010


Ответы (2)


Вы, конечно, шутите:

asec(x) = acos(1 / x)
acsc(x) = asin(1 / x)
acot(x) = atan(1 / x)

:-P

person Chris Jester-Young    schedule 06.01.2010
comment
Да, но это было не совсем очевидно среди множества других уравнений - en.wikipedia.org/wiki / - person RobV; 07.01.2010
comment
не забудьте также добавить код, чтобы избежать хорошо известной проблемы деления на ноль - person JosephDoggie; 30.09.2015

Для обратного котангенса использование atan (1 / x) не всегда работает. Например, мне нужно было решить довольно сложное уравнение:

y = 0,25 * arccot ​​((2,5x / 100000) - 2,1) + 0,26

При реализации решения atan (1 / x) это приводит к разрыву, когда (2,5x / 100000) - 2,1 равно нулю, и все значения слева от этой точки ниже правильных значений на pi / 4.

Вместо этого использование реализации как таковой дает точные ответы на все необходимые вопросы:

y = 0,25 * ((pi / 2) - атан ((2,5x / 100000) -2,1) + 0,26

Я бы посоветовал зайти на desmos.com/calculator или другую графическую утилиту и построить график фактической функции arccot, а затем сравнить различные реализации, чтобы убедиться, что вы получаете то, что хотите для всех значений.

person HaveSpacesuit    schedule 27.03.2015