Main Content

微分方程式の求解

関数 dsolve を使用して微分方程式を解析的に解きます。初期条件はあってもなくてもかまいません。微分方程式系の解を求めるには、微分方程式系の求解を参照してください。

線形 1 階 ODE

この微分方程式の解を求めます。

dydt=ty.

はじめに、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 階微分方程式の数値的な求解を参照してください。

初期条件付き非線形微分方程式

次の初期条件付き非線形微分方程式を解きます。この方程式には複数の解があります。

(dydt+y)2=1,y(0)=0.

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 階微分方程式を解きます。

d2ydx2=cos(2x)y,y(0)=1,y'(0)=0.

方程式と条件を定義します。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;

odey について解きます。関数 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 階微分方程式を解きます。

d3udx3=u,u(0)=1,u(0)=1,u(0)=π.

初期条件には 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® コマンド

dydt+4y(t)=et,y(0)=1.

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

2x2d2ydx2+3xdydxy=0.

syms y(x)
ode = 2*x^2*diff(y,x,2)+3*x*diff(y,x)-y == 0;
ySol(x) = dsolve(ode)
ySol(x) =
C1/(3*x) + C2*x^(1/2)

エアリー方程式。

d2ydx2=xy(x).

syms y(x)
ode = diff(y,x,2) == x*y;
ySol(x) = dsolve(ode)
ySol(x) =
C1*airy(0,x) + C2*airy(2,x)

ピュイズー級数の解。

(x2+1)d2ydx22xdydx+y=0.

syms y(x) a
ode = (x^2+1)*diff(y,x,2)-2*x*diff(y,x)+y == 0;
Dy = diff(y,x);
cond = [Dy(0) == a; y(0) == 5];
ySol(x) = dsolve(ode,cond,'ExpansionPoint',0)
ySol(x) =
- (a*x^5)/120 - (5*x^4)/24 + (a*x^3)/6 - (5*x^2)/2 + a*x + 5

参考

| | | |

関連するトピック