情報処理演習期末レポート課題

下記のうち、いずれか1つの課題を選択し、プログラムを作成してレポートにまとめ提出すること。レポートは、文章で記述した報告書としてまとめること。まとめ方および提出先については、来週指示します。たとえ、最終的にうまくいかない場合でも、出来たところまでで問題点を記述して、期限内に提出すること。期限内に提出されない場合には単位を認めません。


提出期限:7月8日の演習日
課題1:
次のような電極配置の電位分布を計算するプログラムを作成せよ。結果が出たら、 V(1,20) から V(50,20) の値を書き出しなさい。

レポートには、最低限
  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


戻る