数値積分 x xx,,, b xM M x xf xf xf xf xf x xf xf 2

数値シミュレーション 第 8 回 教材
担 当 神保 雅人
2014 年 11 月 14 日(金)実施
数値積分
不定積分
dF ( x )
dx
f ( x ) の様に関数 f (x ) が他の関数 F (x) の微分で表されるとき, F (x) を f (x ) の不定
積分と呼び, f ( x ) dx と表記する。
定数 C を x で微分すると 0 となるため, f ( x ) dx
F ( x) C
となる。
定積分
区間 a
x b を微小な区間 x に分割し,
f ( x ) x を a x b で足し合わせた積和を考える
とき,分割を非常に細かくしていくと積和は一つの
値に収束する(数学的にはε-δ法というより厳密
な 議 論 が 行 わ れ る )。 こ れ を 定 積 分 と 呼 び ,
b
a
f ( x) dx と表記する。定積分はその定義から,右
図の様な f (x ) , x 軸及び x
a,x
b で囲まれた
範囲の面積( f (x ) の値が負の区間では面積に-1 を
掛けたもの)に相当する。また,上述の不定積分
b
F (x) を用いれば, f ( x )dx
a
F (b) F ( a ) と表せる。
台形公式
区間 a
x
b を M 等分し,端点及び分点を
x0 , x1 , , x M とする。ここで, x0
a , xM
b,
x 1 / M である。このとき, f ( x ) x を右図の
様な台形で近似する方法を台形公式と呼ぶ。台形
公式を用いれば,
b
a
f ( x ) dx
f ( x0 )
f ( xM 1 )
f ( x1 ) x
2
f ( xM ) x
2
f ( x1 )
f ( x0 )
2
f ( x2 ) x
2
f ( x1 )
f ( x2 )
f ( xM 1 )
f (xM )
2
x
によって数値的に定積分が求まる。なお,台形公式より精度の高い数値積分の方法として,
- 1 -
数値シミュレーション 第 8 回 教材
担 当 神保 雅人
Simpson の公式が知られている。これは,積分区間を微小な区間に分割して,隣り合う三つの分
点に関して, f (x ) を 2 次関数で近似して得られる公式である。これは次回に扱う。
例題 1
次のプログラムは, f ( x )
2 x とするとき,台形公式を用いて,
2
1
f ( x )dx を求めるものであ
る。これを入力,ビルドして,実行せよ。ここで,クラス名は Sample8_1,ソースファイル名は
Sample8_1.java とする。
public class Sample8_1 {
public static void main(String[] args) {
final int M=100;
final double a=1.0, b=2.0;
double delx, ans=0.0;
delx=(b-a)/M;
ans+=(f(a)+f(b))/2.0;
for(int i=1; i<M; i++) {
ans+=f(a+i*delx);
}
ans*=delx;
System.out.println("定積分の値は"+ans);
}
private static double f(double x) {
return 2*x;
}
}
例題 2
次のプログラムは, f ( x)
3 x 2 とするとき,台形公式を用いて,
3
1
f ( x ) dx を求めるものであ
る。これを入力,ビルドして,実行せよ。ここで,クラス名は Sample8_2,ソースファイル名は
Sample8_2.java とする。
public class Sample8_2 {
public static void main(String[] args) {
- 2 -
数値シミュレーション 第 8 回 教材
担 当 神保 雅人
final int M=200;
final double a=1.0, b=3.0;
double delx, ans=0.0;
delx=(b-a)/M;
ans+=(f(a)+f(b))/2.0;
for(int i=1; i<M; i++) {
ans+=f(a+i*delx);
}
ans*=delx;
System.out.println("定積分の値は"+ans);
}
private static double f(double x) {
return 3*x*x;
}
}
演習 1
f ( x)
x 3 とするとき,台形公式を用いて,
1
1
f ( x ) dx を求めるプログラムを作成し,ビルドし
て,実行せよ。ここで,クラス名は Ex8_1,ソースファイル名は Ex8_1.java とする。
演習 2
分散 1,平均 0 の規格化された( x の全ての範囲で積分した値が 1 となる)正規分布
f ( x)
1
2
exp
x2
に関し,台形公式を用いて,
2
1
1
f ( x ) dx を求めるプログラムを作成し,
ビルドして,実行せよ。ここで,クラス名は Ex8_2,ソースファイル名は Ex8_2.java とする。
今回の提出物
1) Ex8_1.java 及び Ex8_2.java
2) 演習 1 及び 2 の出力結果(Eclipse のコンソールから文字列をコピー)
- 3 -