python反三角函数(特别是arcsin)

时间:2009-04-23 16:03:39

标签: floating-point trigonometry

我目前正在尝试运行涉及三角函数的东西,但是我遇到了涉及math.asin函数的问题(它也适用于acos和atan但是在那些情况下它对我正在尝试的更少影响做)。这个问题最好通过我在其他地方找到的帮助主题中的两篇帖子进行总结;

  

抱歉,我刚刚再次尝试过   发现

     

a = sin(2)
  b = asin(a)
  b不是= 2

     

     

a = cos(2)
  b = acos(a)
  b DOES = 2

     

因为y = sin(x)是重复的   功能,有多个值   x的每个值为y。即sin(2)=   罪(1.14)= 0.909

     

因此,当你做x = asin(y)时,   你只会得到一个值   -PI / 2< = x< = PI / 2

我在数学上理解为什么会这样,但我想知道是否有人能帮我找到范围内的所有解决方案,而不仅仅是它自动提供的解决方案。谢谢=]

3 个答案:

答案 0 :(得分:5)

让我们考虑范围[0,2π)。

对于acos,每个值x在2π-x处也有另一个可能的值。 (想象余弦图,你会看到它。)

对于asin,每个正值x在π - x处有另一个可能的值;每个负值的可能值为3π - x。

随意绘制更多图表以推广到更大的范围。 : - )

答案 1 :(得分:2)

acrsin(a)的所有解决方案都是:

b,pi - b,2pi + b,2pi +(pi - b)等。

答案 2 :(得分:1)

正如其他人已经详细解释的那样,你选择了一个 a 的值,由于三角函数的(重复)性质,导致asin()的结果不确定。

尽管如此,我只是想指出,由于更一般的Floating point accuracy problem <,期望能够在具有浮点的逆操作中获得完全相同的结果可能会失败/ p>

对于浮动点,您可以保证

a == asin(sin(a))

a == (a / b) * b

就此而言。小心点。