二重積分をシンプソン法でときます。
x*y をxが0から1、yを0から1で積分。
#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; double y; /*積分する関数 f(x,y)*/ double f(double x,double y){ return x*y; } /* 積分の範囲 x0からx_max yy0からy_max*/ const double x0 = 0.0000001; const double x_max = 1.0; const double yy0 = 0.0000001; const double y_max = 1.0; /* x方向の積分 */ double simpson(double y){ double delta = (x_max-x0)/n; double a; a = f(x0,y); a += f(x0+delta*n,y); int i; for(i=1;i<n;i+=2){ a += 4.0*f(x0+delta*i,y); } for(i=2;i<n;i+=2){ a += 2.0*f(x0+delta*i,y); } return a*delta/3.0; } /* y方向の積分 */ int main(){ double delta=(y_max-yy0)/n; double a; a = simpson(yy0); a += simpson(yy0+delta*n); int i; for(i=1;i<n;i+=2){ a += 4.0*simpson(yy0+delta*i); } for(i=2;i<n;i+=2){ a += 2.0*simpson(yy0+delta*i); } cout << a*delta/3.0 << endl; return 0; }
実行結果
0.25