- ベストアンサー
SOR法による差分方程式の解法
プログラミングのカテゴリーか少し悩んだのですが、 物理関係で差分方程式を解いている人が多いかと思い、 こちらで質問させて頂きます。 解きたいのは、2Dポアソン方程式です。(1Dでも構いません) 微分方程式を差分化してSOR法を使用します。 SOR法は若干ながらメッシュサイズ、加速係数に 解(ポテンシャル形状)が依存します。 しかし、できるだけこういった条件に依存せずに、 正確な解を得たいです。 より安定に正しい(メッシュサイズなどに依存しない)解が得られる 方法など、SOR法について何かご存知の方、何でも構いませんので、 ご教授のほど宜しくお願いします。 又、複雑な構造(ダブルHEMT構造、局所的に高ドープなど)でも、計算を 収束し易くする方法など、何かありましたらアドバイスをお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
イオンビームの計算で2Dポアソン方程式をSOR法で解いたことがありますが、加速係数の決め方は試行錯誤でやってました。ポアソン方程式ですと右辺が問題依存なので教科書どおりにはいかず、加速係数を変えて反復回数が少なくなるようにするしかありません。面倒ですが、問題の規模が大きくなると反復回数が数千とか数万を超えるので加速係数を使うメリットはあります。 メッシュサイズについては、メッシュサイズを変えて解の収束性を調べ、自分がよしとする精度の解が得られるサイズを選ぶしかありません。どこまでをもってよしとするかはこれもまた問題依存ですが、計算機の性能の制約で決まる場合が多いです。 ところで、SOR法とメッシュサイズの問題は切り分けた方がいいでしょう。そもそも差分化によりポアソン方程式を有限な離散点で近似しているため、仮に差分式を何らかの方法で解いたとしてもそれがもとのポアソン方程式の正確な解であるかは別問題です。
その他の回答 (1)
- device
- ベストアンサー率42% (3/7)
微分方程式を差分化して解いているということは、既にそこに近似的要因を含んでいることになります。よって、「正確な解」というものは得られません。「正確な解」を求める場合、解析的に解く必要があります。差分法で求める解は、「正確な解」と比較して、誤差の小さい解は求めることはできます。ご存知かとは思いますが、そのことには注意してください。 SOR法についてですが、加速係数は最適な値を求めることができます。このことに関しては、一般の文献にも書かれてあるのでそちらを参考にしてください。 メッシュサイズですが、場所によってメッシュサイズを変更するようなプログラミングをオススメします。変化の大きい部分に対しては、その変化に対して十分に小さいメッシュサイズを与えることによってうまく収束すると思います。この関数的なメッシュサイズの与え方によって、収束しなかったものも収束することがあります。 ポアソン方程式を解かれているようですが、その場合には、差分法によるプログラミングよりも、NEWTON法によるプログラミングを強くオススメします。計算時間が数万分の1になることも多々あります。
お礼
色々と教えてくださり、ありがとうございます。 >微分方程式を差分化して解いているということは、 >既にそこに近似的要因を含んでいることになります。 そうですね、その点は注意しておかないとダメですね。 >加速係数は最適な値を求めることができます。 図書館で何か本をあたってみようと思います。 >場所によってメッシュサイズを変更するような >プログラミングをオススメします。 はい、現在のプログラムは10レイヤー構造で、各レイヤーで メッシュサイズが設定できます。そうですね、ポテンシャル変化の 激しいレイヤーのメッシュを細かくすると収束し易いです。 回答頂きありがとうございましたm(__)m
お礼
貴重なご意見、有難うございます。大変参考になります。 >自分がよしとする精度の解が得られるサイズを選ぶしかありません。 そうですか、やはりバイアス、ドナー密度といった計算条件に合わせて、 適切に決めていくしかないようですね。 この設定で大丈夫、というメッシュの決め方があれば、相当プログラムが 使い易くなるので、もしあれば…と思ったんですが、そんな簡単にはいきませんか…。