シンプソン法を式で表すとこのようになります。
を計算します。
を計算します。
#include <iostream> #include <cmath> using namespace std; /* コンパイルできないときは上の3行を次の2行に置き換えてください。 #include <iostream.h> #include <math.h> */ /* nを大きくすると精度が上がる */ const int n = 10; const double pi = 3.141592; /* 積分する関数 f(x) ここでは (exp(-x/0.2)-1)/x を積分 */ double f(double x){ return (exp(-x/0.2)-1)/x; } /* 積分の範囲 x0からx_max */ const double x0 = 0.0000001; // x0を0としないのは、xが0の時に発散するため const double x_max = 1.0; /* シンプソン法による積分計算 */ double simpson(double x0,double x_max){ double delta = (x_max - x0)/n; double a; a = f(x0); a += f(x0 + delta * n); int i; for(i=1; i<n; i+=2){ a += 4.0 * f(x0 + delta * i); } for(i=2; i<n; i+=2){ a += 2.0 * f(x0 + delta * i); } return a*delta/3.0; } int main(){ cout << simpson(x0,x_max) << endl; return 0; }
実行結果
-2.18788