このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
微分方程式系の求解
複数の変数をもつ複数の常微分方程式系を、dsolve
を用いて初期条件の指定に関係なく解きます。一元微分方程式の解を求めるには、微分方程式の求解を参照してください。
微分方程式系の求解
この線形 1 階微分方程式系を解きます。
はじめに、 と を syms
を用いて表現し、シンボリック関数 u(t)
と v(t)
を作成します。
syms u(t) v(t)
==
を使用して方程式を定義し、関数 diff
を使用して微分を表します。
ode1 = diff(u) == 3*u + 4*v; ode2 = diff(v) == -4*u + 3*v; odes = [ode1; ode2]
odes(t) =
構造体の要素として解を返す関数 dsolve
を使用して系を解きます。
S = dsolve(odes)
S = struct with fields:
v: C1*cos(4*t)*exp(3*t) - C2*sin(4*t)*exp(3*t)
u: C2*cos(4*t)*exp(3*t) + C1*sin(4*t)*exp(3*t)
dsolve
を使用して方程式を解くことができない場合、方程式を数値的に解いてみてください。2 階微分方程式の数値的な求解を参照してください。
u(t)
と v(t)
にアクセスするため、構造体 S
でインデックスを指定します。
uSol(t) = S.u
uSol(t) =
vSol(t) = S.v
vSol(t) =
または、複数の出力引数を指定して、u(t)
と v(t)
を直接格納します。
[uSol(t),vSol(t)] = dsolve(odes)
uSol(t) =
vSol(t) =
条件が指定されていないため、定数 C1
と C2
が出現します。初期条件 u(0) == 0
と v(0) == 0
で系を解きます。これらの条件を満たす定数の値を、関数 dsolve
が求めます。
cond1 = u(0) == 0; cond2 = v(0) == 1; conds = [cond1; cond2]; [uSol(t),vSol(t)] = dsolve(odes,conds)
uSol(t) =
vSol(t) =
fplot
を使用して解を可視化します。
fplot(uSol) hold on fplot(vSol) grid on legend('uSol','vSol','Location','best')
行列形式での微分方程式の求解
dsolve
を使用して、微分方程式を行列形式で解きます。
この微分方程式系を考えます。
この系の行列形式は次になります。
以下により
この系は、 となります。
これらの行列と行列方程式を定義します。
syms x(t) y(t) A = [1 2; -1 1]; B = [1; t]; Y = [x; y]; odes = diff(Y) == A*Y + B
odes(t) =
dsolve
を使用して行列方程式を解きます。関数 simplify
を使用して解を単純化します。
[xSol(t),ySol(t)] = dsolve(odes); xSol(t) = simplify(xSol(t))
xSol(t) =
ySol(t) = simplify(ySol(t))
ySol(t) =
条件が指定されていないため、定数 C1
と C2
が出現します。
初期条件 と で系を解きます。方程式を行列形式で指定する場合、初期条件も行列形式で指定しなければなりません。dsolve
で、これらの条件を満たす定数の値を求められます。
C = Y(0) == [2;-1]; [xSol(t),ySol(t)] = dsolve(odes,C)
xSol(t) =
ySol(t) =
fplot
を使用して解を可視化します。
clf fplot(ySol) hold on fplot(xSol) grid on legend('ySol','xSol','Location','best')