Main Content

reduceRedundancies

余分な方程式および変数の排除による 1 階微分代数方程式系の単純化

説明

[newEqs,newVars] = reduceRedundancies(eqs,vars) は、1 階微分代数方程式 (DAE) 系 eqs から冗長な方程式と変数を排除します。入力引数 vars は系の状態変数を指定します。

reduceRedundancies は、新しい DAE 系を列ベクトル newEqs として、簡約化された状態変数を列ベクトル newVars として返します。newEqs の各要素は右辺がゼロに等しい方程式を表します。

[newEqs,newVars,R] = reduceRedundancies(eqs,vars) は排除された方程式と変数に関する情報を含む構造体配列 R を返します。

すべて折りたたむ

4 状態変数の 5 つの微分代数方程式 (DAE) 系を 2 状態変数の 2 つの方程式系に単純化します。

4 つの状態変数 x1(t)x2(t)x3(t) および x4(t) について次の 5 つの DAE から成る系を作成します。また、この系にはシンボリック パラメーター a1a2a3a4bc、ならびに状態変数ではない関数 f(t) が含まれます。

syms x1(t) x2(t) x3(t) x4(t) a1 a2 a3 a4 b c f(t)
eqs = [a1*diff(x1(t),t)+a2*diff(x2(t),t) == b*x4(t),
       a3*diff(x2(t),t)+a4*diff(x3(t),t) == c*x4(t),
       x1(t) == 2*x2(t),
       x4(t) == f(t),
       f(t) == sin(t)];
vars = [x1(t),x2(t),x3(t),x4(t)];

reduceRedundancies を使用して余分な方程式と対応する状態変数を排除します。

[newEqs,newVars] = reduceRedundancies(eqs,vars)
newEqs = 

(a1t x1(t)+a2t x1(t)2-bf(t)a3t x1(t)2+a4t x3(t)-cf(t))

newVars = 

(x1(t)x3(t))

状態変数の入力順序を指定して、DAE の排除時に返される変数を選択します。

4 つの状態変数 V_ac(t)V1(t)V2(t)、および I(t) について 4 つの DAE 系を作成します。また、系にはシンボリック パラメーター LR および V0 が含まれます。

syms V_ac(t) V1(t) V2(t) I(t) L R V0
eqs = [V_ac(t) == V1(t) + V2(t),
       V1(t) == I(t)*R,
       V2(t) == L*diff(I(t),t),
       V_ac(t) == V0*cos(t)]
eqs = 

(Vac(t)=V1(t)+V2(t)V1(t)=RI(t)V2(t)=Lt I(t)Vac(t)=V0cos(t))

vars = [V_ac(t),I(t),V1(t),V2(t)]
vars = (Vac(t)I(t)V1(t)V2(t))

reduceRedundancies を使用して、冗長な方程式と変数を排除します。reduceRedundancies は、ベクトル vars の状態変数を維持して最初の要素から開始するように優先順位付けします。

[newEqs,newVars] = reduceRedundancies(eqs,vars)
newEqs = 

-Lt I(t)-RI(t)+V0cos(t)

newVars = I(t)

ここで、reduceRedundancies は変数 I(t) について簡約化された方程式を返します。

DAE を簡約化する複数の方法が存在する場合、状態変数の異なる入力順序を指定して、返される変数を選択します。状態変数の異なる順序が含まれる別のベクトルを指定します。DAE を再度排除します。

vars2 = [V_ac(t),V1(t),V2(t),I(t)]
vars2 = (Vac(t)V1(t)V2(t)I(t))
[newEqs,newVars] = reduceRedundancies(eqs,vars2)
newEqs = 

-Lt V1(t)+RV1(t)-RV0cos(t)R

newVars = V1(t)

ここで、reduceRedundancies は状態変数 V1(t) について簡約化された方程式を返します。

reduceRedundancies を呼び出すときに 3 つの出力引数を宣言して、方程式系を単純化し、排除された方程式に関する情報を返します。

4 つの状態変数 x1(t)x2(t)x3(t) および x4(t) について次の 5 つの微分代数方程式 (DAE) から成る系を作成します。また、この系にはシンボリック パラメーター a1a2a3a4bc、ならびに状態変数ではない関数 f(t) が含まれます。

syms x1(t) x2(t) x3(t) x4(t) a1 a2 a3 a4 b c f(t)
eqs = [a1*diff(x1(t),t)+a2*diff(x2(t),t) == b*x4(t),
       a3*diff(x2(t),t)+a4*diff(x3(t),t) == c*x4(t),
       x1(t) == 2*x2(t),
       x4(t) == f(t),
       f(t) == sin(t)];
vars = [x1(t),x2(t),x3(t),x4(t)];

reduceRedundancies を 3 つの出力引数と共に呼び出します。

[newEqs,newVars,R] = reduceRedundancies(eqs,vars)
newEqs = 

(a1t x1(t)+a2t x1(t)2-bf(t)a3t x1(t)2+a4t x3(t)-cf(t))

newVars = 

(x1(t)x3(t))

R = struct with fields:
      solvedEquations: [2x1 sym]
    constantVariables: [x4(t)    f(t)]
    replacedVariables: [x2(t)    x1(t)/2]
       otherEquations: f(t) - sin(t)

関数 reduceRedundancies は、排除された方程式に関する情報を R に返します。ここで、R は構造体配列で、4 つのフィールドをもちます。

solvedEquations フィールドには、reduceRedundancies によって排除される方程式が含まれます。排除された方程式には、newEqs に現れない vars の状態変数が含まれます。排除された各方程式の右辺はゼロに等しくなります。

R1 = R.solvedEquations
R1 = 

(x1(t)-2x2(t)x4(t)-f(t))

constantVariables フィールドには 2 列の行列が含まれます。1 列目には reduceRedundancies が定数値で置き換えた、vars の状態変数が含まれます。2 列目には対応する定数値が含まれます。

R2 = R.constantVariables
R2 = (x4(t)f(t))

replacedVariables フィールドには 2 列の行列が含まれます。1 列目には reduceRedundancies が他の変数による式で置き換えた、vars の状態変数が含まれます。2 列目には排除された変数に対応する値が含まれます。

R3 = R.replacedVariables
R3 = 

(x2(t)x1(t)2)

otherEquations フィールドには状態変数 vars を 1 つも含まない eqs の方程式が含まれます。

R4 = R.otherEquations
R4 = f(t)-sin(t)

入力引数

すべて折りたたむ

1 階 DAE 系。シンボリック方程式または式のベクトルとして指定します。

関係演算子 == によって、シンボリック方程式を定義します。eqs の要素を右辺のないシンボリック式として指定した場合、右辺がゼロに等しいシンボリック方程式が仮定されます。

状態変数。x(t) など、シンボリックな関数または関数呼び出しのベクトルとして指定します。

状態変数の入力順序によって、簡約化されたどの変数が返されるかが決まります。DAE を簡約化する複数の方法が存在する場合、reduceRedundanciesvars の状態変数を維持して最初の要素から開始するように優先順位付けします。

例: [x(t),z(t),y(t)]

出力引数

すべて折りたたむ

1 階 DAE の系。シンボリック式の列ベクトルとして返されます。newEqs の各要素は右辺がゼロに等しい方程式を表します。

簡約された一連の変数。シンボリック関数呼び出しの列ベクトルとして返されます。

排除された変数の情報。4 つのフィールドが含まれる構造体配列として返されます。この情報へのアクセスには以下を使用します。

  • R.solvedEquationsreduceRedundanciesnewEqs に現れない状態変数の置き換えに使用したすべての方程式のシンボリック列ベクトルを返します。

  • R.constantVariables。次の 2 つの列をもつ行列を返します。1 列目には、排除されて定数値に置き換えられた、ベクトル vars の元の状態変数が含まれます。2 列目には対応する定数値が含まれます。

  • R.replacedVariables。次の 2 つの列をもつ行列を返します。1 列目には、排除され他の変数に置き換えられた、ベクトル vars の元の状態関数が含まれます。2 列目には排除された変数に対応する値が含まれます。

  • R.otherEquations。元の方程式 eqs で入力変数 vars のいずれも含まないものすべてを含む列ベクトルを返します。

バージョン履歴

R2014b で導入