在C#中实现反三角函数

5

我正在尝试在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#代码。
所以我的问题是:您能否(a)指向一个好的资源,或者(b)展示给我一些示例代码?

1
你是否在MathWorld上查找了你想要的反函数公式? - High Performance Mark
根据您的需求,您可能不需要进行任何严格的数学计算,因此您不需要一个“定义”;您只需要准备一个查找表。 - Tamas Czinege
我在维基百科上花了很长时间,克里斯刚刚发布的公式如果存在的话,在http://en.wikipedia.org/wiki/Trigonometric_functions上并不明显。 - RobV
我只是根据你的正切、余割和余切的公式将它们反向运算了一下。 - C. K. Young
1
我有点感觉很蠢,因为没有能够运用基本的代数 :-( - RobV
1
+1 为了平衡对一个好问题的踩票。 - Alexandre C.
2个回答

11

你一定是在开玩笑:

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

:-P


是的,但在其他方程式的山中并不是很明显- http://en.wikipedia.org/wiki/Inverse_trigonometric_functions#Logarithmic_forms - RobV
请记得添加代码以避免众所周知的除零问题。 - JosephDoggie

0

对于反余切函数,使用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) - atan((2.5x / 100000) -2.1) + 0.26

我建议前往desmos.com/calculator或其他绘图工具,并绘制实际的arccot函数,然后比较各种实现,以确保您获得所需的所有值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接