MATLAB ヘルプ センター
質量行列と、半線形連立微分代数方程式の右辺の抽出
[M,F] = massMatrixForm(eqs,vars)
[M,F] = massMatrixForm(eqs,vars) は、質量行列 M および 1 階半線形微分代数方程式 (DAE) 系の方程式の右辺 F を返します。vars の変数の導関数を一切含まない eqs の代数方程式はその質量行列 M の空の行に対応します。
M
F
eqs
vars
質量行列 M および方程式の右辺 F はこの形で表されます。
M(t,x(t))x˙(t)=F(t,x(t)).
例
すべて折りたたむ
半線形連立微分代数方程式を質量行列形式に変換します。
次の連立微分代数方程式を作成します。ここで、関数 x(t) および y(t) は方程式の状態変数を表します。また、方程式にはシンボリック パラメーター alpha と beta、および関数 f(t,x,y) も含まれます。方程式と変数を 2 つのシンボリック ベクトル (方程式をシンボリック方程式のベクトル、変数をシンボリック関数呼び出しのベクトル) として指定します。
x(t)
y(t)
alpha
beta
f(t,x,y)
syms x(t) y(t) f(t,x,y) alpha beta eqs = [x(t) - diff(x(t),t) == alpha*f(t,x(t),y(t)); ... y(t) + diff(y(t),t) == beta*f(t,x(t),y(t))]
eqs = (x(t)-∂∂t x(t)=α f(t,x(t),y(t))∂∂t y(t)+y(t)=β f(t,x(t),y(t)))
(x(t)-∂∂t x(t)=α f(t,x(t),y(t))∂∂t y(t)+y(t)=β f(t,x(t),y(t)))
vars = [x(t),y(t)];
この方程式の質量行列形式を求めます。
M = (-1001)
(-1001)
F = (α f(t,x(t),y(t))-x(t)β f(t,x(t),y(t))-y(t))
(α f(t,x(t),y(t))-x(t)β f(t,x(t),y(t))-y(t))
数値ソルバー ode15s を使用してこの方程式を求解します。ode15s を使用する前に、方程式のシンボリック パラメーターに値 alpha = 0.01、beta = 0.02、f(t,x,y) = x*y を代入します。また、状態変数 x(t) および y(t) を matlabFunction に受け入れ可能な変数 Y1 および Y2 に置き換えます。
ode15s
alpha = 0.01
beta = 0.02
f(t,x,y) = x*y
matlabFunction
Y1
Y2
syms Y1 Y2 M = subs(M,[vars,alpha,beta,f],[Y1,Y2,0.01,0.02,@(t,x,y) x*y]); F = subs(F,[vars,alpha,beta,f],[Y1,Y2,0.01,0.02,@(t,x,y) x*y]);
次の関数ハンドル MM および FF を作成します。これらの関数ハンドルを odeset および ode15s の入力引数として使用できます。これらの関数では状態変数が列ベクトルとして指定されている必要があります。
MM
FF
odeset
MM = matlabFunction(M,Vars={t,[Y1; Y2]}); FF = matlabFunction(F,Vars={t,[Y1; Y2]});
ode15s を使用して連立方程式を解きます。変数 Y1 および Y2 の初期値を 20 および 10 として指定します。時間間隔 [0 10] にわたり、解をプロットします。
20
0
[0 10]
opt = odeset(Mass=MM); ode15s(FF,[0 15],[50; 20],opt)
次の連立微分代数方程式を作成します。ここで、シンボリック関数 x1(t)、x2(t) および x3(t) は方程式の状態変数を表します。また、方程式にはシンボリック パラメーター a および b が含まれます。
x1(t)
x2(t)
x3(t)
a
b
syms x1(t) x2(t) x3(t) a b eqs = [a*diff(x1,t) == x1*x3- x2; diff(x2,t) == b*x1 - 1; 0 == x1 + x2 + x3]
eqs(t) = (a ∂∂t x1(t)=x1(t) x3(t)-x2(t)∂∂t x2(t)=b x1(t)-10=x1(t)+x2(t)+x3(t))
(a ∂∂t x1(t)=x1(t) x3(t)-x2(t)∂∂t x2(t)=b x1(t)-10=x1(t)+x2(t)+x3(t))
連立方程式の状態変数を求めます。多くの場合、これらの変数は時間のみの関数です。状態変数をプログラムによって特定するには、symfunOf を t として指定して findSymType を使用します。
symfunOf
t
findSymType
vars = findSymType(eqs,"symfunOf",t)
vars = (x1(t)x2(t)x3(t))
M = (a00010000)
(a00010000)
F = (x1(t) x3(t)-x2(t)b x1(t)-1x1(t)+x2(t)+x3(t))
(x1(t) x3(t)-x2(t)b x1(t)-1x1(t)+x2(t)+x3(t))
次に、a および b の値をそれぞれ 2 および 1 として代入します。また、状態変数を matlabFunction に受け入れ可能な変数 Y1、Y2 などに置き換えます。sym を使用して変数 Y1、Y2 などをプログラムによって生成できます。
2
1
sym
numVars = numel(vars); vecY = sym("Y",[1,numVars]); M = subs(M,[a b vars],[2 1 vecY]); F = subs(F,[a b vars],[2 1 vecY]);
次の関数ハンドル MM および FF を作成します。これらの関数ハンドルを odeset および ode15s の入力引数として使用します。これらの関数では状態変数が列ベクトルとして指定されている必要があります。vecY のシンボリック変数は複素数であるため、非共役転置を使用して vecY を列ベクトルに変換します。
vecY
MM = matlabFunction(M,Vars={t,vecY.'}); FF = matlabFunction(F,Vars={t,vecY.'});
ode15s を使用して連立方程式を解きます。変数 Y1、Y2、および Y3 の初期値をそれぞれ 1、1、および -2 として指定します。時間間隔 [0 15] にわたり、解をプロットします。
Y3
-2
[0 15]
opt = odeset(Mass=MM); ode15s(FF,[0 15],[1; 1; -2],opt)
半線形 1 階 DAE の系。シンボリック方程式またはシンボリック式のベクトルとして指定します。
状態変数。x(t) など、シンボリックな関数または関数呼び出しのベクトルとして指定します。
例: [x(t),y(t)] または [x(t);y(t)]
[x(t),y(t)]
[x(t);y(t)]
方程式の質量行列。シンボリック行列として返されます。行数は eqs の方程式の数に対応し、列数は vars の変数の数に対応します。
方程式の右辺。シンボリック式の列ベクトルとして返されます。このベクトルの要素の数は eqs の方程式の数と一致します。
R2014b で導入
findDecoupledBlocks | daeFunction | decic | incidenceMatrix | isLowIndexDAE | matlabFunction | odeFunction | ode15s | odeset | reduceDAEIndex | reduceDAEToODE | reduceDifferentialOrder | reduceRedundancies
findDecoupledBlocks
daeFunction
decic
incidenceMatrix
isLowIndexDAE
odeFunction
reduceDAEIndex
reduceDAEToODE
reduceDifferentialOrder
reduceRedundancies
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
ヨーロッパ
アジア太平洋地域
最寄りの営業オフィスへのお問い合わせ