findDecoupledBlocks
方程式系の分離ブロックの検索
説明
[
は、変数のサブセットの定義に使用可能な方程式のサブセット (ブロック) を特定します。変数の数 eqsBlocks
,varsBlocks
] = findDecoupledBlocks(eqs
,vars
)vars
は方程式の数 eqs
と一致しなければなりません。
i 番目のブロックは、vars(varsBlocks{i})
の変数を決定する一連の方程式です。vars([varsBlocks{1},…,varsBlocks{i-1}])
の変数は前の方程式のブロックによって再帰的に決定されます。1 番目の方程式のブロックを解いて変数の 1 番目のブロックを求めた後、eqs(eqsBlocks{2})
によって与えられた方程式の 2 番目のブロックは、変数の 2 番目のブロック (vars(varsBlock{2})
) によって与えられた変数のサブセットおよび 1 番目のブロックの変数 (これらの変数はこの時点で判明している) のみを含む、分離された方程式のサブセットを定義します。したがって、非自明なブロック分解が可能な場合、多くの変数を含む大きな方程式系の求解プロセスを、いくつかのより小さなサブの系のステップに分割することができます。
ブロック数 length(eqsBlocks)
は length(varsBlocks)
と一致します。length(eqsBlocks) = length(varsBlocks) = 1
の場合、方程式の非自明なブロック分解は不可能です。
例
入力引数
出力引数
ヒント
実装されているアルゴリズムでは、
vars
の各変数について、eqs
にはその変数を含む方程式が、少なくとも 1 つは必ずあることが要求されます。同じ方程式が他の変数にも一致するようなことがあってはなりません。系がこの条件を満たさない場合、findDecoupledBlocks
はエラーをスローします。特に、findDecoupledBlocks
はlength(eqs) = length(vars)
であることを要求します。順列
e = [eqsBlocks{:}]
をベクトルeqs
に、v = [varsBlocks{:}]
をベクトルvars
に適用すると、ブロック下三角行列スパース パターンをもつ接続行列incidenceMatrix(eqs(e), vars(v))
が生成されます。
バージョン履歴
R2014b で導入
参考
daeFunction
| decic
| diag
| incidenceMatrix
| isLowIndexDAE
| massMatrixForm
| odeFunction
| reduceDAEIndex
| reduceDAEToODE
| reduceDifferentialOrder
| reduceRedundancies
| tril
| triu