Main Content

massMatrixForm

質量行列と、半線形微分代数方程式系の右辺の抽出

説明

[M,F] = massMatrixForm(eqs,vars) は、質量行列 M および 1 階半線形微分代数方程式 (DAE) 系の方程式の右辺 F を返します。vars の変数の導関数を一切含まない eqs の代数方程式はその質量行列 M の空の行に対応します。

質量行列 M および方程式の右辺 F はこの形で表されます。

M(t,x(t))x˙(t)=F(t,x(t)).

すべて折りたたむ

微分代数方程式の半線形系を質量行列形式に変換します。

次の微分代数方程式系を作成します。ここで、関数 x1(t) および x2(t) は系の状態変数を表します。また、系にはシンボリック パラメーター rm、および関数 f(t,x1,x2) も含まれます。方程式と変数を 2 つのシンボリック ベクトル (方程式をシンボリック方程式のベクトル、変数をシンボリック関数呼び出しのベクトル) として指定します。

syms x1(t) x2(t) f(t,x1,x2) r m
eqs = [m*x2(t)*diff(x1(t), t) + m*t*diff(x2(t), t) == f(t, x1(t), x2(t)),...
       x1(t)^2 + x2(t)^2 == r^2];
vars = [x1(t),x2(t)];

この系の質量行列形式を求めます。

[M,F] = massMatrixForm(eqs, vars)
M = 

(mx2(t)mt00)

F = 

(f(t,x1(t),x2(t))r2-x1(t)2-x2(t)2)

数値ソルバー ode15s を使用してこの系を求解します。ode15s を使用する前に、系のシンボリック パラメーターに値 m = 100r = 1f(t,x1,x2) = t + x1*x2 を代入します。また、状態変数 x1(t)x2(t)matlabFunction に受け入れ可能な変数 Y1Y2 に置き換えます。

syms Y1 Y2
M = subs(M, [vars, m, r, f], [Y1, Y2, 100, 1, @(t,x1,x2) t + x1*x2]);
F = subs(F, [vars, m, r, f], [Y1, Y2, 100, 1, @(t,x1,x2) t + x1*x2]);

次の関数ハンドル MM および FF を作成します。これらの関数ハンドルを odeset および ode15s の入力引数として使用できます。これらの関数では状態変数が列ベクトルとして指定されている必要があります。

MM = matlabFunction(M, 'vars', {t, [Y1; Y2]});
FF = matlabFunction(F, 'vars', {t, [Y1; Y2]});

ode15s を使用して方程式系を解きます。

opt = odeset('Mass', MM, 'InitialSlope', [0.005;0]);
ode15s(FF, [0,1], [0.5; 0.5*sqrt(3)], opt)

Figure contains an axes object. The axes object contains 4 objects of type line.

Copyright 2014 The MathWorks, Inc

入力引数

すべて折りたたむ

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

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

例: [x(t),y(t)] または [x(t);y(t)]

出力引数

すべて折りたたむ

系の質量行列。シンボリック行列として返されます。行数は eqs の方程式の数に対応し、列数は vars の変数の数に対応します。

方程式の右辺。シンボリック式の列ベクトルとして返されます。このベクトルの要素の数は eqs の方程式の数と一致します。

バージョン履歴

R2014b で導入