« Wiiかじられた | メイン | ぽかぽか »
2006年12月14日
三角関数の多項式近似の係数
コンピュータで sin の計算をするときって、テイラー展開を低次の項で打ち切った多項式近似って感じの計算をしてるわけなのですが、その係数の求め方がよくわからん。
sin を テイラー展開(マクローリン展開?)すると、こんな感じになるでしょ。
sin(x) = x - x3/3! + x5/5! - x7/7! + x9/9! - ...
で、newlib の sinf の実装を見てみると、9次の項までを使った多項式近似になってて、こんな係数を使ってるんよね。
static const float r[] = { -0.1666665668, /* -1/3! = -0.1666666666... */ 0.8333025139e-02, /* 1/5! = 0.8333333333...e-02 */ -0.1980741872e-03, /* -1/7! = -0.1984126984...e-03 */ 0.2601903036e-5 /* 1/9! = 0.2755731922...e-05 */ };
コメントに書いたのがテイラー展開したときの係数なのだけど、実際に使われている値と違うでしょ?多分、精度を上げるためにこんな係数を使っているのだと思うのだけど、どうやってこれを求めたのかが良く分からない。最小二乗法とかで求めるの?誰か知らない?
投稿者 sike : 2006年12月14日 01:43
トラックバック
このエントリーのトラックバックURL:
http://ashiato.jp/mt33/mt-tb.cgi/149
コメント
多分チェビシェフ近似です。
チェビシェフ近似を計算できるプログラムで、三角関数を近似してみてください。ほぼ同じ係数が出てくるんじゃないかと思います。
投稿者 通りすがり : 2008年07月06日 22:25
おー、こんな昔の記事にコメントが付くとは!
通りすがりの方、ありがとうございます。
チェビシェフ近似を調べてみます。
投稿者 sike : 2008年07月07日 09:34