pdsolve/numeric - 時間を含む偏微分方程式の数値解を求める
使い方
pdsolve(PDEsys, conditions, numeric, vars, options)
パラメータ
PDEsys - 単独の時間依存型二変数偏微分方程式か、その集合またはリスト
conditions - 初期条件および境界条件の集合かリスト
numeric - 数値解を得るために指示するキーワード
vars - ( オプション ) PDEsys の従変数か集合、またはリスト
options - ( オプション ) keyword = value の形式の方程式であり、keyword は 'indepvars', 'time', 'range', 'spacestep', 'timestep', 'bcopts', 'optimize', 'errorest', 'errortype', 'abstol', 'mintimestep', 'maxtimestep' のいずれか。; 問題とその解のために指定するオプション
|
説明
|
|
•
|
pdsolve(PDEsys,conditions,numeric,vars,options) コマンドは、単純な長方形領域の時間を含む連立 PDE の数値解を計算するために使用することができるモジュールを返します。
|
•
|
pdsolve/numeric ルーチンは、数値解を得るために有限差分法を使用します。
|
•
|
連立 PDE 、すなわち PDEsys は、diff 記法を指定しなければなりません。
|
•
|
初期条件 / 境界条件 conditions での導関数は、D 記号を用いなければなりません ( 例えば u(x,y), D[1](u)(0,y) は直線 x=0 上の標準な導関数を表しています。 ) 。
|
•
|
vars パラメータは、問題の従変数 (s) を指定します。PDEs の方程式系の解を計算することが可能なソルバーのために、出力での従変数のためのオーダーを設定します。
|
•
|
独立変数の指定に関する情報は、このヘルプページの オプション をご参照ください。
|
|
|
時間を含むソルバー
|
|
|
- 一つ目の操作方法は、中心となる暗黙の仕組み、および高階の PDE または連立 PDE のための解を見つけることができる方法として、デフォルトの計算法を使用します。連立 PDE は数値解を求める算法のための標準的な形式に十分近いものでなければなりません。
|
|
- 二つ目の操作方法は、厳密には教育的なものであり、PDE を解くための特定の算法の仕様を許容するものとなります。この操作は単独の PDE に制限されています。
|
|
|
オプション
|
|
|
デフォルトの計算法のオプション方程式は以下になります。
|
|
問題の独立変数を指定し、独立変数の値で与えられる解の計算に返される手順の独立変数のオーダーを設定します。
|
|
'time'=name, 'range'=l..r
|
|
time 引数は、range 引数が空間の領域を指定している間、時間変数の名前を指定します。注意 : 両オプションの値は、もし境界条件が領域の両端点で指定されていたならば、自動的に決定されます。これらのオプションは、通常は一階の非周期的な問題、つまり条件の端点が一つだけ現れるような問題のためのみに必要とされます。
|
|
解が計算される離散的なメッシュ空間の点の間隔を指定します。デフォルトでは、l を左の境界、r を右の境界として r-l の空間の領域の 1/20 となっています。注意 : 間隔は、与えられた計算法、境界条件、空間の補間 ( 以下をご参照ください ) に関する空間の領域で十分多くの点が満足するように小さくなければなりません。もし、与えられた spacestep の値が時間の積分番号で入力した領域を通して適さないならば、最も閉じた小さいステップ幅を使用します。誤差評価を使用する問題および適応型の計算法では、空間の点の総数は奇数でなければならず、一方で spacestep の指定で異なる場合は要求を満たすために減少します。
|
|
PDE を時間の方向に積分するときの時間のステップ幅の設定を行います。調整前の空間のステップ spacestep のデフォルトの値は、間隔に適するように設定されています。
|
|
境界条件の離散化に使用する点の個数を指定します。デフォルトでは、空間変数で PDE の微分の階数より大きいものの一つを使用します。これは境界条件のために一階の正確な近似を設定します。さらなる詳細は Details をご参照ください。
|
|
'optimize'=boolean/symbol
|
|
計算法を生成する際に使用する最適化のレベルを指定します。最適化の三つの型は、true, 'partial', false を使用することができます。デフォルトの最適化 'partial' は、計算法の生成において、少しの時間の浪費で公平な良いものを与えます。false を設定すると、全ての場合において最適化を無効にします ( おすすめはいたしません ) 。true を設定すると、数値解法を扱う場合に pdsolve が codegen[optimize] を呼び出します。最適化でとる時間によって完全に最適化された計算法の使用効率の追加調整がしばしば補正される理由は、'partial' がデフォルトの設定となっていることによります。
|
|
'errorest'=boolean,'errortype'=keyword,'abstol'=numeric,'mintimestep'=numeric, 'maxtimestep'=numeric
|
|
|
詳細
|
|
|
デフォルトの計算法は二階 ( 空間と時間について ) を主な対象としており、解の計算には暗黙に有限差分スキームを使用しています。有限差分スキームのステンシルの多くの点は、各方程式の次数よりも大きいものの一つとなっています。
|
|
注意 : 一階の境界条件の計算法の解度は ( デフォルトでは ) 二階の計算法の解度に使用することができ、二階の解度の解の設定にも使用することができます。低すぎる解度のオーダーによる境界条件の使用は解の解度を下げることになり、高すぎる解度のオーダーによる境界条件の使用は問題の安定性に悪影響を与えるかもしれません。一階と二階の計算法の解度は、空間変数の PDE の微分の階数よりも大きい一つか二つの境界点を使用することを一般的におすすめします。三階と四階の計算法の解度は、空間変数の PDE の微分の階数よりも大きい二つか三つの境界点を使用することを一般的におすすめします。
|
|
時間上で一階よりも大きい PDE は、一次の方程式系と等価な変換によって解かれます。注意 : 一階の変換は予期されたものであり、すなわち一階以上の任意の従変数において、全ての低次の時間導関数、および対応する方程式を表す変数を方程式系に追加します。変数を追加する選択は、誤差制御を使用している場合、常に要求されたものであるとは限らず、しばしば、自分で一次の方程式系を選んだ方がより良い性能を得られることがあります。この話題の詳細は pdsolve/numeric/firstorder をご参照ください。
|
|
メッシュ上にない点で要求された値は、4 つの空間の点と 3 つの時間の点を扱う Lagrange 補間を使用して計算されます。時間の点は ( 可能な場合はいつも ) 要求された時間よりも大きい時間の点が一つだけ選ばれることになります。
|
|
|
モジュール
|
|
|
pdsolve/numeric によって返されたモジュールは、入力した PDE の解の計算および表示に使用することができる多くの計算法を持っています。: plot, plot3d, animate, そして value があります。さらに settings 法は、解法の過程で現れるパラメータの処理に query/set を使用することができます。
|
|
もし、pdsolve/numeric で返された計算法がと pde_module なる名前で割り当てられた場合、計算法が持つ pde_module:-method(arguments) 形式として使用する列を呼び出します。これは plot, plot3d, animate, value, settings のうちのいずれか一つとなります。
|
|
解の値の計算を伴う全ての計算法が、各関数に関するオプションを伴う従変数および独立変数の複数の関数の仕様を指定します。これは、それぞれに対する異なったオプションを仕様とする同様のコマンドを含む表示をプロットに許可します。これらについての全ての記述がここにあります。以下の方法で、これは名前によって参考されるだけとなります。
|
|
depspec のデフォルトの値は、追加オプションのない問題の最初の従変数となっています。
|
|
単独の関数の場合、depspec は従変数と独立変数の関数、あるいはオプションに従ったそれらのリストとみなすことができます。例えば u(x,t)-sin(x), あるいは [u(x,t),color=blue] となります。
|
|
もし多くの関数が指定された場合、depspec は、関数のリストとして、あるいは単独の関数の場合とした function/option の組み合わせとして与えることができます。例えば {u(x,t),w(x,t)}, あるいは [[u(x,t)+t,color=blue],w(x,t)] となります。
|
|
plot は以下を補助として呼び出すことができます。
|
|
plot(v1=numeric, options)
|
|
plot(depspec, v1=numeric, options)
|
|
plot(v1=numeric, v2=range, options)
|
|
plot(depspec, v1=numeric, v2=range, options)
|
|
上記として呼び出した場合、values/ranges は v1=numeric および v2=range によって指定されます。v1,v2 は問題の独立変数の名前であり、プロットの領域を指定するものとなります。
|
|
もし、v1 の値のみが ( 最初の二個の呼び出しがあった場合として ) 指定された場合、関数は指定として固定された独立変数の値と、他の独立変数に関する境界の間のに及ぶ領域を含んでプロットされます。例えば、u(x,t) の問題で t=1 と指定すると、x は [0,1] 区間で定義され、x=0..1 について u(x,1) がプロットされます。
|
|
注意 : もし、空間変数が固定されると、時間の領域は三番目、および四番目に呼び出されるとして子弟しなければなりません。
|
|
もし、互いの値と区間が指定された場合、v1 は指定された値と v2 によって決まる領域上の表示によって固定されます。v2 の区間は v2 の境界で抑えられなければなりません。
|
|
options 入力は、depspec の plot-specific オプションと対立しない全ての表示プロットに適用するために plot options を指定します。
|
|
plot とは異なり、プロット法は timestep および spacestep で制御する計算領域で用いる離散点を使用することをデフォルトとします。これは、空間の点と等しい npt をプロットを得るための補間で計算する場合、 numpoints=npt プロットオプションを使用することで変更することが可能です。
|
|
animate は以下を補助として呼び出すことができます。
|
|
animate(v1=numeric, range, list, options)
|
|
animate(depspec, v1=numeric, range, list, options)
|
|
animate(v1=numeric, range, list, v2=range, options)
|
|
animate(depspec, v1=numeric, range, list, v2=range, options)
|
|
上記として呼び出した場合、v1,v2 を問題の独立変数の名前として、v1 が与えるアニメーションのために values/ranges を指定し、v2=range が指定するアニメーションの各フレームの領域で range を指定します。
|
|
v1 の値の指定は、v1 のどの値がアニメーションの各フレームに対応しているかを決定します。もし range として指定された場合、16 フレームのデフォルトは、使用するオプションの frames=integer を変更することができるアニメーションの生成のために使用します。もしリストとして指定された場合、リストの v1 の値は分類され、アニメーションの各フレームのための v1 の値と対応しています。注意 : v1 を時間変数とした v1=numeric なる指定は、t[0] を初期時間としたときの t[0]<numeric のための t=t[0]..numeric の指定と t[0]>numeric のための t=numeric..t[0] の指定を対応させます。
|
|
v2=range 引数 ( もし設定されているならば ) は、プロットの区間を与えます。もし提示されていなければ、これは問題の境界の間隔のデフォルトとなります。
|
|
注意 : もし v1 が空間変数と対応した場合、v2=range を設定しなければなりません。
|
|
options 入力は、depspec の plot-specific オプションと対立しない全ての表示プロットに適用するために plot options を指定します。
|
|
さらに、title オプションは追加機能を持ちます。printf コード形式の浮動小数点を使用することで、アニメーションのフレームに時間か空間の値を表示させることができます。例えば、時間依存型のアニメーションにおいて title="t=%f" を指定すれば、%f の場所で現在の時間を含む title の指定を表示させます。詳細は printf のヘルプページにある浮動小数点形式をご参照ください。
|
|
plots[animate] とは異なり、アニメーションの方法は、timestep および spacestep の制御として、計算領域で用いる離散点を使用することをデフォルトとしています。これは、空間の点と等しい npt をプロットを得るための補間で計算する場合、 numpoints=npt プロットオプションを使用することで変更することが可能です。
|
|
plot3d は以下を補助として呼び出すことができます。
|
|
plot3d(v1=numeric, range, options)
|
|
plot3d(depspec, v1=numeric, range, options)
|
|
plot3d(v1=numeric, range, v2=range, options)
|
|
plot3d(depspec, v1=numeric, range, v2=range, options)
|
|
上記として呼び出した場合、values/ranges は、v1,v2 を問題の独立変数の名前として、 v1 と v2 が 3-D プロットを設定している長方形領域を指定するために指定されます。
|
|
v1,v2 の指定はプロットの領域を決定します。animate のように、v1=numeric の指定は時間変数のための初期点の間隔の形式を決定します。
|
|
options 入力は、depspec の plot-specific オプションと対立しない全ての表示プロットに適用するために plot3d options を指定します。
|
|
plot3d とは異なり、plot3d は RGB と HUE 型の両方の色の指定において従変数および独立変数の暗黙な関数を補助します。例えば、u(x,t) の PDE 問題のために、RGB の値は color=[u(x,t),x-u(x,t)^2,x*t/u(x,t)] で指定することができます。
|
|
value は PDE および連立 PDE の解の数値を得るための作用を設定します。value は以下を補助として呼び出すことができます。
|
|
value(v1=numeric, options)
|
|
value(depspec, v1=numeric, options)
|
|
value(v1=numeric, v2=range, options)
|
|
value(depspec, v1=numeric, v2=range, options)
|
|
全ての場合で、value は一点での解の評価に使用できる手順を返します。
|
|
これらの明確な二つの出力形式は、二変数関数 ( 領域上の解 ) および一変量の関数 ( 固定された一つの独立変数の値を含む解の概略 ) となります。
|
|
最初の二つの呼び出しは、二変数関数の出力を設定し、返された関数は与えられた両方の独立変数の値の手続きとなり、解の値 (s) を返します。これらを呼び出すために、解は各点が要求されたとして計算されたものとなります。
|
|
残りの四つの呼び出しは、数値関数値の指定のために固定された v1 を含む解の概略を設定します。これらを呼び出すために、解は出力のために既に計算されており、出力の補間について本質的な設定の手続きを返します。5 番目と 6 番目の呼び出しは、v1 が空間変数と対応しています。この場合、返された手続きは v2=range で指定された時間区間のための値のみ計算することができます。
|
|
唯一の許可されるオプションは、返された手続き (s) のための出力の型を指定するために使用されますが、dsolve[numeric] のように output=procedurelist ( デフォルト ) または output=listprocedure の一方が使用できます。procedurelist 出力は、もし有効な独立変数を含んで呼び出された場合は単独の手順を返し、独立変数の値と、もし設定されているならば depspec で指定された従変数の値のための方程式のリストを返します。listprocedure 出力は、方程式の左辺で指定された数値の計算のために呼ぶことができる手続きと対応する方程式の右辺のリストを返します。
|
|
settings コマンドは解の計算のための検索要求および設定に従います。これは以下を補助として呼び出すことができます。
|
|
一つ目の呼び出しは検索要求のみであり、計算のために変更できる設定を教えてくれます。
|
|
二つ目の呼び出しは options の指定に基づいて設定を変更することができます。timestep と spacestep を含む有効なオプションは、timestep の変更ができない解のモジュールの生成後の spacestep の値を変更するような例外を含んだ、オリジナルの pdsolve/numeric の呼び出しの場合と同様にして設定することができます。適応型のモジュールは settings のための追加プションがあります。詳細は pdsolve,numeric,errorcontrol をご参照ください。
|
|
|
例
|
|
単純な波動方程式 :
>
|
PDE := diff(u(x,t),t)=-diff(u(x,t),x);
|
| (6.1) |
>
|
IBC := {u(x,0)=sin(2*Pi*x),u(0,t)=-sin(2*Pi*t)};
|
| (6.2) |
>
|
pds := pdsolve(PDE,IBC,numeric,time=t,range=0..1);
|
| (6.3) |
>
|
p1:=pds:-plot(t=0,numpoints=50):
p2:=pds:-plot(t=1/8,numpoints=50,color=blue):
p3:=pds:-plot(t=1/4,numpoints=50,color=green):
plots[display]({p1,p2,p3});
|
誤差のプロット ( 完全な解を既知とした場合 ) :
>
|
esol := sin(2*Pi*(x-t));
p2:=pds:-plot(u-esol,t=1/8,numpoints=50,color=blue):
p3:=pds:-plot(u-esol,t=3/8,numpoints=50,color=green):
plots[display]({p2,p3});
|
左端を定温、右端を絶縁として固定した熱伝導方程式 :
>
|
PDE := diff(u(x,t),t)=1/10*diff(u(x,t),x,x);
|
| (6.4) |
>
|
IBC := {u(x,0)=1, u(0,t)=0, D[1](u)(1,t)=0};
|
| (6.5) |
>
|
pds := pdsolve(PDE,IBC,numeric);
|
| (6.6) |
>
|
p1 := pds:-plot(t=0):
p2 := pds:-plot(t=1/10):
p3 := pds:-plot(t=1/2):
p4 := pds:-plot(t=1):
p5 := pds:-plot(t=2):
plots[display]({p1,p2,p3,p4,p5},
title=`Heat profile at t=0,0.1,0.5,1,2`);
|
>
|
pds:-value(t=1,output=listprocedure);
|
| (6.7) |
| (6.8) |
>
|
fsolve(uval(x)=1/2,x=0..1);
|
| (6.9) |
>
|
pds:-plot3d(t=0..1,x=0..1,axes=boxed,
orientation=[-120,40],
color=[0,0,u]);
|
重調和 : 固定端と固定角度を持つ棒 :
>
|
PDE := diff(u(x,t),t,t)=-1/10*diff(u(x,t),x,x,x,x);
|
| (6.10) |
>
|
IBC := {u(x,0)=sin(Pi*x)^2,D[2](u)(x,0)=0,
u(-1,t)=0,D[1](u)(-1,t)=0,
u(1,t)=0,D[1](u)(1,t)=0};
|
| (6.11) |
>
|
pds := pdsolve(PDE,IBC,numeric,spacestep=1/40);
|
| (6.12) |
以下のコマンドによる動画 ( タイトルで時間を表示します ) :
>
|
pds:-animate(t=2,frames=50,title="time = %f");
|
非線形 PDE の衝撃の構造のちょうど前の解 :
>
|
PDE := diff(u(x,t),t)=-diff(u(x,t),x)*u(x,t);
|
| (6.13) |
>
|
IBC := {u(x,0)=exp(-16*(x-1/2)^2)/2, u(0,t)=exp(-4)/2};
|
| (6.14) |
>
|
pds := pdsolve(PDE, IBC, numeric, time=t, range=0..2,
spacestep=1/256, timestep=1/60);
|
| (6.15) |
以下のコマンドを含むアニメーション :
>
|
pds:-animate(t=0.60,frames=31);
|
|
|
参照
|
|
codegen[optimize], dsolve[numeric], fsolve, pdsolve, pdsolve/numeric/education, pdsolve/numeric/errorcontrol, pdsolve/numeric/firstorder, pdsolve/numeric/method, plot, plot3d, plot options, plots[animate], plots[display]
|
|
参考文献
|
|
|
Strikwerda, J. C. Finite Difference Schemes and Partial Differential Equations. Wadsworth and Brooks/Cole, 1989.
|
|
Carrier, G. F. and Pearson, C. E. Partial Differential Equations: Theory and Technique (2ed). Academic Press, 1988.
|
|
Boyce, W.E. and DiPrima, R.C. Elementary Differential Equations and Boundary Value Problems. John Wiley & Sons, New York, 1997.
|
|
|