PDEのシステム用の有限差分行列の自動生成


8

解くPDEのシステムがあるとします。少なくとも簡単にするために、それが時間に依存せず、(x、y)空間の長方形グリッド上で解決された準線形(その導関数では線形)であり、境界条件がすべて指定されていると仮定しましょう。私の質問はより一般的ですが、ここから始めましょう。

2つの従属変数、v x y )がある場合があります。一般的な方程式は次のような形になります。あなたバツyvバツy

aバツyYバツバツ+bバツyYyy+cYバツy+dバツyYバツ+eバツyYy=fバツyY

ここで、からeまでのすべての関数は2x2行列、fは2x1行列、YaefY

Yバツy=あなたバツyvバツy

有限差分数値近似を計算するとします。グリッド点がxとyで等間隔にあると仮定します。Nポイントに、yMポイントに離散化できます。そして、2(nm)列ベクトルとしてソリューションを構築します。バツNyM

バツ=あなた11あなた1あなたメートルv11vメートル

次に、ある種の行列方程式A + B + C + D + E X = bを解きます

+B+C+D+Eバツ=b

ここで、2nm x 2nm行列からEは、対応する微分演算子の有限差分行列です。括弧内の結合されたマトリックスは、ある種のブロックバンド構造になります。境界条件のために、それらのエッジ値は複雑になる場合があります。E

私の質問は単純です:行列AからEを生成する簡単な方法(特にMatlabで)はありますか?または、少なくとも、必要なすべての行列を作成するための簡単なガイド(おそらく、手動入力の可能性がある境界条件に必要な変更を除く)。E

問題は、これを手作業で行えることですが、それは(i)代数が多いことです。(ii)実装時に多くのタイプミスやエラーが発生する。

例えば、ここではデリバティブの異なる順序のための1D差分「マトリックス」のため、あなたに必要なすべてのベクトルを与えるコードがあります。平面上のPDEのシステムに類似点はありますか?

回答:


3

私は簡単な解決策を知りませんが、MapleやMaximaのような記号計算パッケージを使用してこれを自動化することはそれほど難しくありません。あなたはできますここで、このアイデアの例を参照 1D拡散方程式に適用します。

特に、LinearAlgebra[GenerateMatrix](Mapleで)またはaugcoefmatrix(Maximaで)関数が必要です。MATLABにはシンボリック計算ツールボックスがあり、この目的にも使用できると思います。

実装の自動化に関してCodeGenerationは、Maple のモジュールを使用してMATLABコードを出力したり、Maxima のgrindand fortran関数を使用して、MATLABに近い出力を生成したりできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.