台形の面積の計算法を使って円の面積を近似する
図Prog10_1_sekibunは半径1の単位円である。
X軸上の二つの点A(Xi,0)、 B(Xi+1,0)からX軸に垂線を引き,円と交わったところをD(Xi,f(Xi)), C(Xi+1,f(Xi+1))としている。ADとBCは平行であるから、四角形ABCDは台形を構成している。この台形の高さはa=Xi+1-Xiである。aを一定にしたこのような台形をn個描くとすると幅(台形の高さ)は1/nとなる。ただし、最初の台形のA点は原点(0,0),二つ目の台形のA点は(1/n, 0),三つ目の台形のA点は(2/n, 0),…,最後の台形のA点は((n-1)/n, 0),B点は(n/n, 0)。これらn個の台形の面積の合計はnが十分に大きければ、円の面積のほぼ1/4となると考えることができる。従って、以下の ような手順で円の面積の近似計算をすることができる。全ての台形の面積の合計Totalは以下の式で表すことができる。
式1はn個の台形の合計面積、式2は一つ一つの台形の面積、式3は点Aにの台形の下底の長さ、式4は台形の上底の長さ、式5は(x,0)における円上の+y座標。
図Prog10_1_srcは単位円の面積を数値積分により計算するプログラムである。プログラムの末尾に実行結果が表示されています。
式1の計算手順をプログラム化したものが、図Prog10_1_srcのメソッドen_area()である。
図Prog10_1_srcについて:
3,4行 x1,x2をdoubleで、nをintで宣言しています。
5行 メソッドf(x)をMath.sqrt(1.0-x*x)としています。これは単位円のグラフにおけるy座標に相当します。上の式5です。MathはJavaが用意しているライブラリーの標準パッケージのMathクラスです。sqrtはそこにあるメソッドです。
6行 メソッドdaikei()は台形の面積の計算式に相当します。
7から16行 全ての台形(0からn-1)の合計の4倍です。
27から29行 実行結果です。
27行 n=1のとき、面積は四つの三角形の合計で2.0になります。
n=10 のとき、面積は3.10...
n=100000のとき 面積は3.141592… かなり精度が上がっています。単位円の面積はπであるから、ほぼ正しいと結果と言えるでしょう。