Реализация тригонометрических обратных функций в c#
-
19-09-2019 - |
Вопрос
Я пытаюсь реализовать обратные тригонометрические функции в приложении на 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 #.
Итак, мой вопрос в том, можете ли вы либо (а) указать мне направление к хорошему ресурсу, либо (б) показать мне какой-нибудь пример кода для этого?
Решение
Конечно, вы шутите:
asec(x) = acos(1 / x)
acsc(x) = asin(1 / x)
acot(x) = atan(1 / x)
:-П
Другие советы
Для обратного котангенса использование atan(1 / x) не всегда будет работать.Например, мне нужно было составить довольно сложное уравнение:
y = 0,25 * арккот((2,5 x / 100000) - 2,1) + 0,26
При реализации решения atan (1 / x) это приводит к разрыву, когда (2.5x / 100000) - 2.1 равно нулю, и все значения слева от этой точки ниже правильных значений на pi / 4.
Вместо этого использование реализации как таковой обеспечивает точные ответы по всем необходимым пунктам:
y = 0,25 * ((pi / 2) - атан((2,5 x / 100000) -2,1) + 0,26
Я бы посоветовал перейти к desmos.com/calculator или какой-либо другой графической утилите и отобразить фактическую функцию arccot, затем сравнить различные реализации, чтобы убедиться, что вы получаете то, что хотите для всех значений.