三角関数の比率の計算


8

関数を計算する必要があります: および gx=sinax

f(x)=sin1xx
ここで[01]のx[0π
g(x)=sinaxsinx
a[0,1]及び(しばしば非常に小さいX«1)。これらのような「特別な」機能のための非常に正確なアルゴリズムを生成する一般的な方法はありますか?x[0,π2]x1

回答:


9

x

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

xx0=0x


4

私のアプローチは、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項で切り捨てられたテイラー級数展開で、2番目の数値は正確な評価です。SymPyは正確な算術演算を使用します。この例では、x = 1/100とa = 1/2を使用しましたが、これで遊ぶことができます。最後に、数値を簡単に比較できるように、30桁の10進数で評価します。3番目の数値は、Pythonの浮動小数点数を使用した倍精度評価です。

この場合、キャンセルはないようです。ただし、他の式の場合、直接の倍精度評価は十分に正確ではない場合があり、級数展開はそれを評価する1つの方法です。もう1つは有理近似MiniMaxApproximationです。過去にMathematicaで使用して大きな成功を収めました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.