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

StackOverflow https://stackoverflow.com/questions/2014902

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top