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

Я пытаюсь реализовать обратные тригонометрические функции в приложении C #. Очевидно, я не говорю о простом обратном грехе, потому что и загар видят, поскольку все они предоставляются классом 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 #.

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

Ответы [ 2 ]

11 голосов
/ 06 января 2010

Конечно, вы шутите:

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

: - P

0 голосов
/ 27 марта 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, а затем сравнить различные реализации, чтобы убедиться, что вы получаете то, что хотите для всех значений.

...