微分方程式の求解
関数 dsolve
を使用して微分方程式を解析的に解きます。初期条件はあってもなくてもかまいません。微分方程式系の解を求めるには、微分方程式系の求解を参照してください。
線形 1 階 ODE
この微分方程式の解を求めます。
はじめに、y を syms
を用いて表現し、シンボリック関数 y(t)
を作成します。
syms y(t)
==
を使用して方程式を定義し、関数 diff
を使用して微分を表します。
ode = diff(y,t) == t*y
ode(t) = diff(y(t), t) == t*y(t)
dsolve
を使用して方程式を解きます。
ySol(t) = dsolve(ode)
ySol(t) = C1*exp(t^2/2)
条件付き微分方程式の求解
前の解では条件が指定されていないため、定数 C1
が出現します。初期条件 y(0) == 2
で方程式を解きます。関数 dsolve
により、条件を満たす値 C1
が求まります。
cond = y(0) == 2; ySol(t) = dsolve(ode,cond)
ySol(t) = 2*exp(t^2/2)
dsolve
を使用して方程式を解くことができない場合、方程式を数値的に解いてみてください。2 階微分方程式の数値的な求解を参照してください。
初期条件付き非線形微分方程式
次の初期条件付き非線形微分方程式を解きます。この方程式には複数の解があります。
syms y(t) ode = (diff(y,t)+y)^2 == 1; cond = y(0) == 0; ySol(t) = dsolve(ode,cond)
ySol(t) = exp(-t) - 1 1 - exp(-t)
初期条件付き 2 階 ODE
2 つの初期条件を使用して、次の 2 階微分方程式を解きます。
方程式と条件を定義します。2 つめの初期条件には y
の 1 次導関数が含まれます。シンボリック関数 Dy = diff(y)
を作成して微分を表現してから、Dy(0)==0
を用いて条件を定義します。
syms y(x) Dy = diff(y); ode = diff(y,x,2) == cos(2*x)-y; cond1 = y(0) == 1; cond2 = Dy(0) == 0;
ode
を y
について解きます。関数 simplify
を使用して解を単純化します。
conds = [cond1 cond2]; ySol(x) = dsolve(ode,conds); ySol = simplify(ySol)
ySol(x) = 1 - (8*sin(x/2)^4)/3
初期条件付き 3 階 ODE
3 つの初期条件を使用して、次の 3 階微分方程式を解きます。
初期条件には 1 次および 2 次導関数が含まれるため、2 つのシンボリック関数 Du = diff(u,x)
および D2u = diff(u,x,2)
を作成し、初期条件を指定します。
syms u(x) Du = diff(u,x); D2u = diff(u,x,2);
方程式と初期条件を作成し、解きます。
ode = diff(u,x,3) == u; cond1 = u(0) == 1; cond2 = Du(0) == -1; cond3 = D2u(0) == pi; conds = [cond1 cond2 cond3]; uSol(x) = dsolve(ode,conds)
uSol(x) = (pi*exp(x))/3 - exp(-x/2)*cos((3^(1/2)*x)/2)*(pi/3 - 1) -... (3^(1/2)*exp(-x/2)*sin((3^(1/2)*x)/2)*(pi + 1))/3
その他の ODE の例
次の表では、微分方程式、および Symbolic Math Toolbox™ でのその構文の例を説明します。最後の例はエアリー微分方程式であり、その解はエアリー関数と呼ばれます。
微分方程式 | MATLAB® コマンド |
---|---|
| syms y(t) ode = diff(y)+4*y == exp(-t); cond = y(0) == 1; ySol(t) = dsolve(ode,cond) ySol(t) = exp(-t)/3 + (2*exp(-4*t))/3 |
| syms y(x) ode = 2*x^2*diff(y,x,2)+3*x*diff(y,x)-y == 0; ySol(x) = dsolve(ode) ySol(x) = C2/(3*x) + C3*x^(1/2) |
エアリー方程式。 | syms y(x) ode = diff(y,x,2) == x*y; ySol(x) = dsolve(ode) ySol(x) = C1*airy(0,x) + C2*airy(2,x) |
参考
dsolve
| odeFunction
| odeToVectorField
| reduceDifferentialOrder
| daeFunction