Main Content

reduceDifferentialOrder

同等な 1 階微分方程式系への高階数の微分方程式系の簡約

説明

[newEqs,newVars] = reduceDifferentialOrder(eqs,vars) は、高階数微分方程式系 eqs を、eqs の導関数を新しい変数で代替することにより、1 階微分方程式系 newEqs に書き換えます。ここで、newVars は、元の変数 vars をこれらの新しい変数で拡張した構成です。

[newEqs,newVars,R] = reduceDifferentialOrder(eqs,vars) は、元の変数 vars の導関数として新しい変数を newVars に示す行列 R を返します。

DAE 系の微分階数の簡約

高階数 DAE を含む系を 1 階 DAE のみを含む系に簡約します。

2 階式を含む微分方程式系を作成します。ここで、x(t) および y(t) は系の状態変数で、c1 および c2 はパラメーターです。方程式と変数を 2 つのシンボリック ベクトル (方程式をシンボリック方程式のベクトル、変数をシンボリック関数呼び出しのベクトル) として指定します。

syms x(t) y(t) c1 c2
eqs = [diff(x(t), t, t) + sin(x(t)) + y(t) == c1*cos(t),...
                              diff(y(t), t) == c2*x(t)];
vars = [x(t), y(t)];

この系を書き換えてすべての方程式が 1 階微分方程式になるようにします。関数 reduceDifferentialOrder は新しい変数 Dxt(t) を導入することによって高階数 DAE を 1 次式に置き換えます。また、すべての方程式をシンボリック式として表します。

[newEqs, newVars] = reduceDifferentialOrder(eqs, vars)
newEqs =
 diff(Dxt(t), t) + sin(x(t)) + y(t) - c1*cos(t)
                        diff(y(t), t) - c2*x(t)
                         Dxt(t) - diff(x(t), t)
 
newVars =
   x(t)
   y(t)
 Dxt(t)

生成された変数と元の変数の関係の表示

2 次および 3 次式を含む系を 1 階 DAE のみを含む系に簡約します。さらに、この系の元の変数を通して reduceDifferentialOrder によって生成された変数を表す行列を返します。

2 階式および 3 階式を含む微分方程式系を作成します。ここで、x(t) および y(t) は系の状態変数です。方程式と変数を 2 つのシンボリック ベクトル (方程式をシンボリック方程式のベクトル、変数をシンボリック関数呼び出しのベクトル) として指定します。

syms x(t) y(t) f(t)
eqs = [diff(x(t),t,t) == diff(f(t),t,t,t), diff(y(t),t,t,t) == diff(f(t),t,t)];
vars = [x(t), y(t)];

reduceDifferentialOrder を 3 つの出力引数と共に呼び出します。この構文は 2 つの列をもつ行列 R を返します。1 列目には新しい変数が含まれ、2 列目では新しい変数が元の変数 x(t) および y(t) の導関数として表されます。

[newEqs, newVars, R] = reduceDifferentialOrder(eqs, vars)
newEqs =
 diff(Dxt(t), t) - diff(f(t), t, t, t)
   diff(Dytt(t), t) - diff(f(t), t, t)
                Dxt(t) - diff(x(t), t)
                Dyt(t) - diff(y(t), t)
             Dytt(t) - diff(Dyt(t), t)
 
newVars =
    x(t)
    y(t)
  Dxt(t)
  Dyt(t)
 Dytt(t)
 
R =
[  Dxt(t),    diff(x(t), t)]
[  Dyt(t),    diff(y(t), t)]
[ Dytt(t), diff(y(t), t, t)]

入力引数

すべて折りたたむ

高階数微分方程式を含む系。シンボリック方程式またはシンボリック式のベクトルとして指定します。

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

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

出力引数

すべて折りたたむ

1 階微分方程式系。シンボリック式の列ベクトルとして返されます。

拡張された変数のセット。シンボリック関数呼び出しの列ベクトルとして返されます。このベクトルには元の状態変数 vars に続き、eqs の高階数導関数に置き換わる、生成された変数が含まれます。

新しい変数と元の変数の関係。2 列のシンボリック行列として返されます。1 列目には新しい変数 newVars が含まれます。2 列目にはそれらの定義が元の変数 vars の導関数として含まれます。

バージョン履歴

R2014b で導入