2016-11-15 4 views
0

C++でtaylor_sinを変換:は、私は少し機能には、この数学の公式を変換する必要があり、大学での私のクラスのためのプログラム

enter image description here

私のコードは次のようになります

double taylor_sin(double x) 
{ 
    double taylor = x - (std::pow(x, 3)/6); 
    return taylor; 
} 

問題があります、私はそれをstd :: sin(x)と比較する必要があります。そして、私はプログラムを実行するとき、私は非常に異なる答えを得る。実装に間違いはありますか?

+1

https://www.wolframalpha.com/input/?i=plot+sin(x)+and+x+-+x%5E3%2F6 –

+0

ありがとうございます。それは少し私の問題を理解するのを助けました:) – adamswebspace

+0

両方にラジアンとして角度を渡していることを確認してください。テイラー級数展開は、小さな角度に対してのみ有効です。 – duffymo

答えて

0

x0に近い場合、実装は正しくなります。

sin(x)x > 1またはx < -1ですぐに分岐します。次の残りの部分はpow(x, 5)/(5!)です。

たとえば、x = 2の場合、誤差は約32/120であり、[-1、+ 1]の結果にはそれ以上無視できます。あなたの問題のために

、あなたのような間隔でtaylor_sinを計算することができ、[0、PI/2]とNの大きな次の計算

sin_taylor

は内のすべてのxに対して罪に近いように十分[ 0、PI/2]となる。

次にsin(PI + x)= -sin(x)、sin(-x)= -sin(x)、sin(2 * PI + x)= sin [0、PI/2]にyがあり、xがその区間にないときは同じsinである。

+0

あなたの答えをありがとう。 これは90度、180度、331度などの角度に使う必要があるので、それは悪いことです。 だから私はあなたが言及したものに私の既存のpowを変更する必要がありますか? – adamswebspace

+0

@adamswebspaceわかりません。正確なsin(x)計算は、例えば無限の計算を伴うhttp://math2.org/math/algebra/functions/sincos/expansions.htmで与えられる。 xが[-pi/2、pi/2]の場合、適切な数の項を見つけることができます。 – Franck

+0

それは最後に働いた。ありがとう:) – adamswebspace

関連する問題