• ベストアンサー

プログラムについて

プログラムについて 2次元ラプラス方程式を差分法で解くというプログラムなのですが、 ・プログラムの流れ ・具体的に(初期値はいくら、実際の計算、誤差の比較など)どこでどのような計算をしているのか を教えていただけないでしょうか? 面倒だとは思いますがお願いします。 以下プログラムURL http://www.geocities.jp/laprog321/ .

質問者が選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8469/18131)
回答No.1

http://okwave.jp/qa/q5605457.html と同じだね。これに付いている回答のどの辺が不満なのか書かないと,結局おなじ回答が出てくるだけだよ。 初期値はいくら  u[i][j]=sin((j-1)/(SIZE*M_PI))+cos((j-1)/(SIZE*M_PI)); 端っこだけはいつも0 実際の計算 u[i][j]=(uu[i-1][j]+uu[i+1][j]+uu[i][j-1]+uu[i][j+1])/4.0; 前イテレーションの値uuを使ってuを更新 誤差の比較 err=0.0; err+=(uu[i][j]-u[i][j])*(uu[i][j]-u[i][j]); で残差をだして while (err>EPS); の間は繰り返す。でも #define EPS 1.0e-1 だから非常に甘い判定です。計算結果が欲しいんじゃなくて,計算速度を確認したいだけなんでしょうね。

qwe1232
質問者

補足

ご指摘ありがとうございます。その通りですね。 質問が悪かったです。申し訳ありません。 自分はまずプログラムを理解しようとするために、 インターネットなどで、ラプラス方程式の差分法による解き方について いろいろ調べて、式を考えたりしました。 そして、このプログラムがいう差分法とは中央差分式を用いて解いているのかと 思ったのですが、ラプラス方程式をコンピュータに解かせる場合、解き方の反復法として、 いろいろな種類(ガウスザイデル法、ヤコビ法、SOR法など)の方法があることがわかりました。 もちろん、質問させていただいているので、プログラムの流れも教えていただきたいのですが、 質問にある具体的にどのような計算とは、その解き方として、 実際にどの方法を利用してどのように計算しているのかということでした。 分かりにくい言葉足らずな質問、補足ではありますが、みなさん回答お願いします。

関連するQ&A