EMANの物理学 過去ログ No.2863 〜

 ● 汎用の偏微分方程式 solver プログラム solvePDE(..) を作りました。

  投稿者:小林@那須 - 2007/10/20(Sat) 09:16  No.2863 
汎用の偏微分方程式 solver プログラムを作りました。初期条件と偏微分方程式に対応する漸化式を
solvePDE(..) 関数に与えることで、数値解を計算させます。任意の初期条件、任意数 N 次の偏微分方程式を扱えるように作ってあります。ベクトル値偏微分方程式さえ扱えます。楕円型、放物型などの偏微分方程式の種類への対応はユーザーが用意する漸化式に委ねられます。

漸化式による偏微分方程式の数値解法自体は珍しくありません。コード例も多くあります。でも汎用の偏微分方程式 solver としてまとめたのは世界で最初だと思います。ただし汎用の solver として記述するために python 言語を使わざるをえませんでした。C++/STL などで書けば計算スピードが二桁程度早くなるのは解かっているのですが、汎用プログラムとしては記述する気にも慣れません。無理筋です。

Python interpreter で書いたといえ、△φ = 0 の数値解を 40x40 のデータとして計算させる時間は一秒程度です。十分に実用的です。ただし 40 x 40 の数値の塊だけでは、人間が計算結果をイメージできません。視覚化が必須です。幸い python には 3D モデリング専用の vpython というパッケージがあります。これを使って行列データの視覚化も行わせています。この意味で十分に実用的にできたと自負しています。偏微分方程式 solver としては Mathematica にも勝っていると思っているのですが如何でしょうか。

ただ python という日本では未だメジャーになっていない言語で初期化条件の記述や漸化式の記述をしなければならないことが solvePDE(..) を受け入れることの障害になりそうで心配です。初期条件と漸化式の記述だけならば python の詳しいことを知らなくなくても済むので、C 言語などの素養があれば一日程度で sovePDE(..) を使えるとも思っています。3D 表示のためにすることは make3dRowCol( solvePDE(初期条件辞書行列, 漸化式) ) と書くだけであり vpython を理解する必要もありません。

下に python の知識がゼロであることを前提に solvePDE(..) の使い方をまとめてみました。

http://www.nasuinfo.or.jp/FreeSpace/kenji/sf/python/PDE/PtlDffEq.htm


後半には下のような solvePDE(..) の具体的な適用例を書いてみました。この掲示板を見るような方たちならば興味を持っていただけると思います。

  △φ = 0 :電位分布
  △φ=0 に浮いた導体を置いて見ます
  □ψ == 0 : t,x 二次元波動方程式
  (□ - 1)ψ == 0 :Klein Goldon 方程式
  ∂^2ψ/∂x^2 - ∂^2ψ/∂t -1 == 0 :Klein Goldon もどき方程式
  ∂f(x,t)/∂x)^2 + ∂f(x,t)/∂t=g(q) Hamilton Jacobi 偏微分方程式 1
  div E = 0 : ベクトル偏微分方程式
  (∂S/∂x)^2 + (∂S/∂y)^2 - K == 0 Hamilton Jacobi 偏微分方程式 2


solvePDE(..) についての皆様の評価・批判を伺えますでしょうか。

  投稿者:hirota - 2007/10/22(Mon) 11:03  No.2868 
「使い方」のページを見てきました。(結構、理解するのが手間みたい)
ところで、対称性の高い漸化式とは、2変数で言うと
∂f (x , y)/∂x = ( f (x +δx , y +δy) - f (x , y +δy) + f (x +δx , y) - f (x , y) )/(2δx)
みたいなモノですか?