下記のうち、いずれか1つの課題を選択し、プログラムを作成してレポートにまとめ提出すること。レポートは、文章で記述した報告書としてまとめること。まとめ方および提出先については、来週指示します。たとえ、最終的にうまくいかない場合でも、出来たところまでで問題点を記述して、期限内に提出すること。期限内に提出されない場合には単位を認めません。
レポートには、最低限
1)プログラムリスト
2)V(40,i) i=1,50の値
3)V(j,40) j=1,50の値
を含めなさい。
(1,1) V=0 (99,1) +---------------------+ 外側の電極は正方形で電位が零、 内側の電極は | | 図に示す板状で電位が1である。 | | 形状の対称性より、1/4 の部分のみ計算すればよい。 | V=1 | | +=========+ | 電位を二次元配列 V(50,50) で確保したとき、 | (25,50) (75,50) | 電極位置以外の電位 V(i,j) は | | V(i,j) = ( V(i-1,j) + V(i+1,j) | | +V(i,j-1) + V(i,j+1) )/4.0 +---------------------+ としてまわりの電位から計算できる。この関係を (1,99) (99,99) 用いて適当な初期値 (たとえば V(i,j)=0.0)から はじめて変化がなくなるまで逐次計算を繰り返す(緩和法)。 なお対称性より、 V(i,51) = V(i,49)、V(51,j) = V(49,j) の関係がある。
プログラミングのヒント: 電位分布V(x,y)は、空間に電荷が存在しなければ、 xおよびyに関する2次微分の値が0でなければなりません。 空間を、等間隔で区切って、その値をV(i,j)で表わすと、 注目する点とその上下左右の点での電位の間に、 V(i,j) = ( V(i-1,j) + V(i+1,j) +V(i,j-1) + V(i,j+1) )/4.0 の関係が成り立つことが数学的に示されます。 計算は、最初に適当な値(例えば0)を電位分布V(i,j)に与えておき、 上の式を用いて、修正していきます。具体的には、 (0)電圧を記憶しておく配列を確保する。例えば real*8 V(50,50), Vt(50,50) (1)全てのVt(i,j)に0.0を代入する (2)電極での値を与える。例えば、 do i=1,50 Vt(1,i)=0.0 Vt(i,1)=0.0 end do do i=25,50 Vt(i,50)=1.0 end do (3)Vtの値をVにコピーする。 (4)電極以外の点での電圧を式にしたがってより正しい値Vtを計算する。 do j=2,49 do i=2,49 Vt(i,j) = ( V(i-1,j) + V(i+1,j) +V(i,j-1) + V(i,j+1) )/4.0 end do end do (5)Vt(50,i) i=2,49およびVt(i,50) i=2,24の計算を行う。 どのようにしたら良いかを考えよう。 (対称性より、 V(i,51) = V(i,49)、V(51,j) = V(49,j) の関係がある) (6)3、4、5を繰り返す。 何回繰り返したら正しい答えが見つかるか考えよう。 (7)Vt(40,i) i=1,50の値、Vt(j,40) j=1,50の値を表示させ、 答えが正しいか確認する。
この方法は、分かりやすいが計算時間が非常に多くかかります。より速く計算結果が得られる方法を考えてみましょう。
課題2:
Monte Calro法を用いて円周率(π)の近似値を求めなさい。
考え方:
(a) 2桁の乱数XiとXi+1を作り、Xi*Xi+Xi+1*Xi+1≧10000を満たす乱数の数をp、Xi*Xi+Xi+1*Xi+1<10000を満たす乱数の数をqとすれば、πの近似値は4q/(p+q)である。
(b) K桁の乱数の作り方は、Xi(K桁)に定数C(素数)を乗じて、下位K桁をとりだし、これを新しい乱数Xi+1とする。
(1) 乱数を作るプログラムを、Xiを与えてXi+1を返すサブルーチンとして作りなさい。
(2) p+q=500からはじめ、2倍つづ大きくして、16000までの近似値の変化を見なさい。
(3) 素数Cを変えて、結果の変化を調べなさい。
(4) 結果を次のような表にして示しなさい。
C p+q p pai
17 500 102 3.184