三角函数的计算比率

计算科学 特殊功能
2021-12-16 09:51:34

我需要计算函数: 其中并且通常非常小()。是否有任何通用方法可以为这些“特殊”功能生成高精度算法?

f(x)=sin1xx
g(x)=sinaxsinx
a[0,1]x[0,π2]x1

2个回答

对枚举数和分母进行多项式展开(la l'Hopital 规则),你会得到一个有理函数,对于小的,它将很好地逼近函数。x

例如:

sinaxsinxax13!(ax)3+x13!x3+=a13!a3x2+113!x2+.

如果您知道要评估的范围,您可以做得更好。 然后,您可以通过更适合周围的泰勒展开xx0=0x

我的方法是使用 SymPy 之类的软件,如下所示:

from sympy import var, sin, S
var("x a")
g = sin(a*x)/sin(x)
gseries = g.series(x, 0, 10).removeO()
s = {x: S(1)/100, a: S(1)/2}
print gseries.subs(s).n(30)
print g.subs(s).n(30)
print "%.17f" % g.subs({x: 1./100, a: 1./2})

打印:

0.500006250065104828565736800905
0.500006250065104828565736868886
0.50000625006510480

第一个数字是 10 项截断的泰勒级数展开式,第二个数字是精确评估。SymPy 使用精确算术,在本例中我使用 x = 1/100 和 a = 1/2,但您可以使用它。最后,我将它评估为 30 个十进制数字,以便人们可以轻松地比较这些数字。第三个数字是使用 Python 浮点数的双精度计算。

在这种情况下,在我看来,没有取消。但是对于其他表达式,直接双精度评估可能不够准确,然后级数扩展是评估它的一种方法。另一个是有理逼近,我过去MiniMaxApproximation在 Mathematica 中使用过,并取得了巨大的成功。