電子書籍の厳選無料作品が豊富!

2次元ラプラス方程式を差分法で解くというプログラムなのですが、

・プログラムの流れ

・具体的にどのような計算をしているのか

を教えていただけないでしょうか?

面倒だとは思いますがお願いします。

以下プログラムURL
http://www.geocities.jp/laprog321/

A 回答 (1件)

double second()


ただ単に、処理時間を表示するために、時間を
取得しているだけで、方程式の解法には関係あ
りません。

void init(double u[SIZE+2][SIZE+2])
解くべき方程式の境界条件を設定しています。
と思ったら、初期条件を設定しています。
ちょっと不自然な気もしますが。

int main()
方程式を解くための主要部分です。
格子状の配列の、上・下・右・左の値の平均を
とることを繰り返しています。
これを繰り返すことで、方程式の解に収束します。

配列を、u, uu と2つ準備し、

・一番最初に、init() を呼んで初期条件をセット。

・uu の配列で、上・下・右・左の値の平均をとって
 u に代入(1回分の計算)

・この繰り返しが収束したかどうかチェックするために
 u (このステップの計算前)と uu(このステップの計
 算後)のノルム(この場合は、差の自乗の和)が、EPS
 以下になるまで繰り返し。

・繰り返しに当たって、u の値を、uu に代入して、同
 じ計算を繰り返す。
 ※実は繰り返しの最初で、u を uu に代入(コピー)
  しているので、init(uu); は不要。

・最後に結果とかかった時間を表示
(と思ったら、結果は表示していませんでした)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!