微分代数方程式系の状態空間法
ヤコビ行列 および が両方可逆ならば,陰関数定理により,その系は状態空間形式で以下のように表すことができる.
可逆条件は実質的に系が指数1であることと同等なので,状態空間形式に基づくメソッドは指数1の微分代数方程式系に適している.最も一般的な形式は であり, が恒等行列であるものである.
時間積分メソッドの"StateSpace"はこの表現に基づいている. の値が与えられると,および を見付けるためにニュートンの反復法が使われる.右辺の関数の評価だけを必要する,根底の常微分方程式メソッドに対して,値 が返される.評価と評価の間に,次の評価の反復を初期化するために,前に計算された導関数の値と代数的変数が保存される.
状態空間形式から得られる常微分方程式は,非常に硬いことが多いためヤコビアンを必要とする.これは有限差分を用いて計算することができるが,行列 と がすでに計算されているために,問題構造を使った方がより正確で効率的である.右辺のヤコビアンは についての分割された系を微分することにより計算することができる.
および の行列分解は,通常ニュートン反復から保存されるので,転置の適用は効率的に計算することができる.
"StateSpace"メソッドは,各時間刻みに対してではなく各評価に対して,時によっては繰返し と を解かなければならず,1つの時間刻みに対して多数の評価があるかもしれないので,通常デフォルトの"IDA"マルチステップメソッドよりも遅い. 場合によってはスピードをオフセットする可能性のある利点も存在する.その利点とは,関数評価に対して局所的な反復はより安定しているということ,A安定の内在する積分法は全体の安定性を向上させるために使うことができるということ,内在するメソッドが1ステップであればそのメソッドは実質的に1ステップ法であるということ,メソッドは任意精度の解を許可するために実装されるということである.
"StateSpace"メソッドのMethodオプションを使うと,内在する積分メソッドを選ぶことができる.
ブロック下三角(BLT)形式
系の構造によっては,その系をブロック下三角形式に並べ替えた方がよい場合がある.ブロック下三角形式を使うことで,小さいサイズで数の多い部分問題の解となる.最大のブロックサイズを大きく減少させることができるならば,この構造を使うことでニュートン反復法の計算の複雑性を大きく減少させることができる.
ブロック下三角形式は,矛盾のない初期化を含め,微分代数方程式系を解く方法,指数減少法のダミー導関数を設定する方法,疎な線形系を解く方法の多くで使われている.ここでの説明は,状態空間法での使用に焦点を当てるが,他にも当てはまることもある.
ブロック下三角形式の最も簡単な形は,行列アルゴリズムであり,それがWolfram言語でアクセスするときの最も一般的な方法である.
SparseArray`BlockTriangularOrdering[s] | s[[rk,ck]]が並べ替えられた行列s[[r,c]]の対角に沿った k 番目のブロックとなるように,行列 s の行と列の並べ替え{{r1,…,rb},{c1,…,cb}}を与える.ここで r=Flatten[{r1,…,rb}],c=Flatten[{c1,…,cb}],並べ替えられた行列の他のすべての要素は対角要素より下に現れる |
s が特異でない場合,対角要素を上から見ていくと,それぞれの連続するブロックの変数は前のブロックの変数にのみ依存する.つまり,線形方程式 は対角を上から順に,各ブロック部分系を順に解くことで解くことができ,計算努力を大きく節約することができる場合がある.
この系の場合,ブロックはすべてサイズ1であるため,特に解きやすい.ブロック下三角順の方程式のリストから分かるように,変数値を連続して選べるからである.状態空間メソッドの場合,h={h1,h2,h3}が与えられるので導関数h′を得ることは自明である.
ブロック下三角行列の便利さは,非線形問題にも当然当てはまる.
この形式から,ならばヤコビアンは特異であることが明白である.
前と同様に,対角線を上から下に向かって,部分問題を順に解いていくことができる.x',y,yd1が見付かると(非線形問題は,スカラーのニュートンソルバで実行することができる),x1',yd2, λ を得るためには3×3のブロックだけを解けばよい.
方程式 には に対する解が2つある.ニュートン反復法を開始するために,前の値を使うことにより連続性が維持される.
メソッドオプション"BlockLowerTriangular"を使うと,さまざまな方法でブロック下三角順を使うよう状態空間メソッドに指示することができる.
Automatic | どのようにブロック下三角順を使うかを自動的に決定する |
False | ブロック下三角順を使わない |
"Ordering" | ブロック下三角順を使って,変数と方程式を並べる |
"Solve" | 連続した部分系を解くためにブロック下三角順を使うことで解く |
"BlockLowerTriangular"メソッドオプションの設定
この例では,系が大変小さいため,時間が非常に近い.ブロック下三角順のヤコビアンの小さいブロックを持った大きい系では,その差分がもっとはっきりしている.