【问题标题】:Implementing Trigonometric Inverse Functions in c#在 C# 中实现三角反函数
【发布时间】:2010-01-06 17:35:46
【问题描述】:

我正在尝试在 C# 应用程序中实现反三角函数。显然,我不是在谈论简单的逆正弦、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# 代码。

所以我的问题是,您能否 (a) 为我指明一个好的资源的方向,或者 (b) 显示一些示例代码?

【问题讨论】:

  • 你检查过 MathWorld 中你想要的逆公式吗?
  • 根据您的需要,您可能不需要做任何严肃的数学运算,因此您不需要“定义”;你只需要准备一个查找表。
  • 我在 Wikipedia 上花了很长时间,Chris 刚刚发布的公式在 en.wikipedia.org/wiki/Trigonometric_functions> 上并不明显
  • 我对没有应用基本代数感到有点愚蠢:-(
  • +1 用于平衡对一个好问题的反对意见。

标签: c# trigonometry inverse


【解决方案1】:

你一定是在开玩笑:

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

:-P

【讨论】:

  • 是的,但在其他等式的堆积如山中并不十分明显 - en.wikipedia.org/wiki/…
  • 记得添加代码以避免众所周知的除以零问题
【解决方案2】:

对于反余切,使用 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 函数,然后比较各种实现以确保您得到所有​​值的所需值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    相关资源
    最近更新 更多