情報通信工学科 2年 コンピュータ数値解析(学内専用) 中川朋子


数値積分(台形公式)

台形公式で数値積分するプログラムを作り、 以下の定積分を計算しなさい。

(1) 予備課題(手計算で積分できる関数でプログラムの動作確認)
手計算で積分できる関数(ただしx2より難しいもの)を、好きな区間(x=aから
x=bまで)について手計算で積分し、理論値(真の値)を求めておきます。
(例 f(x) = x4 や f(x) = ex を x = 0 から x = 1 まで積分、とか)
(ただし f(x) = x2 や f(x) = x などは誤差が出ないので避けて下さい)
次に、台形公式のプログラムで数値積分し、真の値(手計算結果)と比べて、
台形公式の性質が成り立つのは積分区間を最大何等分したときまでか調べ、
得られた積分結果を正しい精度で報告しなさい。

(2) 真の課題(手計算で積分できないから、コンピュータで数値積分)
f(x) = exp( -x2) を x = 1 から x = (学生番号 下3桁) まで積分しなさい。

(1)予備課題 のやりかた  
横軸を「区間数」(何等分したか)、縦軸を「誤差の大きさ」としたグラフを描きながら実験しよう。
値がどんどん細かくなるので、グラフ用紙は両対数目盛が良いです    Excelでグラフを書くとき

区間数 n を変られるようにプログラムを作っておけば、
コンパイル(gcc)は1回行うだけで、何度も実行(a.out)できて楽ですね。

区間数 n は、3とか4とかではなく、128とか256とか1万とか2万とか、十分細かくとってください。
区間数 n は、200, 300, 400, のように増やすよりも、倍、その倍、そのまた倍、、、、
というように増やしていったほうが 規則性がきれいに出ます。

区間数を n とすると、刻み幅 h = ( b-a )/n です。nは整数です。 

手計算で求めた真の値からのずれ(誤差)は、区間数nや刻み幅h と どんな関係にあるでしょうか。
その関係は永久に続くのでしょうか。その関係が崩れるのは、nがいくつの時ですか。

提出するときには、
どんな関数をどんな区間で積分したのか、真の積分値はいくらになるはずなのか
区間数と誤差の関係(グラフ必須)
区間数と誤差の関係が崩れるのはnがいくつからか
を書いてください。

(2)真の課題 のHint
この関数は手計算で積分できませんから、「真の値」がわかりませんよね。
刻み数を2倍、2倍、、、と変えていき「一つ前の計算値との差」から誤差と真の値を推定します。

(1)(2) 共通
指数関数や三角関数を使うときは<math.h>を#includeする。コンパイルの時は -lm を忘れずに
printfで出力させるとき、少数以下の桁数が少なすぎると、誤差が調べられませんよ。   よくあるまちがい

数値積分 採点基準
計算方法が正しい (4点)
端の処理が正しい (1点)
積分結果が正しい (積分結果が書いていない答案は論外(点なし)です)(1点)
積分結果を吟味している(元のグラフと見比べたりして良い感じの値か判断している)(1点)
刻み幅・区間数を変えて何回か計算している(1点)
精度を推定している(1点)
積分結果の精度が正しく書いてある(桁数が多すぎても少なすぎても誤りです)(1点)

数値解析の最初のページに戻る