c言語によるガウス-ルジャンドル積分法

数値積分で簡単なものは台形則とシンプソン則が有名ですよね。台形則は言うまでも無く、関数を多数の台形で近似して積分する方法です。シンプソン則は分割点から随時放物線近似を行い、積分する方法です。

どちらも簡単に理解し、プログラムを作れます。しかしこの二つの方法は計算量が多く、近年の計算機でも計算に時間がかかってしまいます。二つの数値積分方法上、精度を上げるには分点をひたすら多くとらなければなりません。分点が多ければいいというわけではないですが(計算機には有効桁数があるため)、それでも十分な精度を得るには分点数が多くなってしまいます。

もっと早くて精度よく積分する方法はないのかと探すと、一般人でも簡単に使える方法があり、それが「ガウス-ルジャンドル積分法」です。中身を理解しようとするとちょっと大変ですが、とりあえず使ってみると台形則とシンプソン則に比べるとめちゃくちゃ早く、精度も悪くないです。

ネットで転がってるプログラムはいくつかありましたが
http://www.ed.u-tokai.ac.jp/takakura/takakura/book_SuuchiKeisan/RC08.pdf
これがわかりやすくてよかったです。東海大学の研究室ウェブサイトらしい。

上記のプログラムを参考にわかりやすく書き変えたものです。
gauss.c

ちなみにガウス-ルジャンドル積分法では多項式補間・近似がしにくい関数は精度が悪くなるそうです。

トップページへ inserted by FC2 system