数値シミュレーション 第 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 -
© Copyright 2024 ExpyDoc