数値積分(長方形近似)
数値積分の考え方
被積分関数
を定積分するときは、
のように解析的に求められますが、関数が数式で表せないときは数値積分が役立ちます。ここでは簡単な数値積分の方法を紹介します。
まず以下の図のように、曲線とx軸のaからbまでの間に囲まれた面積を求めたいとき、n個の長方形で分割します。分割幅を
とすると
と表せます。つまり多数の長方形を使って、求めたい面積の形状を近似して作るのです。
後はそれぞれの長方形の面積を求め足し合わせていき、その合計値が積分値となります。積分値の導出式は
と書けます。nの値が大きいほど、より精度の高い結果が得られますが、この数値積分方法は曲線の形状によっては、または曲線の値で発散する場所があったりすると上手くいかない事があるので注意が必要です。
プログラムソース
例としてプログラムでは、三角関数sin(x)を0からπ/2までの範囲を数値積分してみます。この積分は解析的に求めると1になる事がわかっています。
#include <stdio.h>
#include <math.h>
double f(double x);
int main() {
int n;
double a,b,x,dx,sum;
n=100; //分割数
a=0.0; //左端の値
b=3.14/2.0; //右端の値
dx=(b-a)/n; //間隔
sum=0.0;
for(x=a;x<b;x+=dx) {
sum+=f(x)*dx;
}
printf("積分値は %f\n",sum);
return 0;
}
/*被積分関数*/
double f(double x) {
return sin(x);
}
数値計算実行結果
数値積分結果は以下のように出ました。解析に求められる積分値の1に近い値となっています。プログラムでnの値を大きくするほど1の値に近づく事がわかります。
積分値は 0.991333
2009/04/19 更新