2 階微分方程式の数値的な求解
この例では、2 階微分方程式を微分方程式系に変換し、MATLAB® の数値ソルバー ode45
を使用して解く方法を説明します。
高階数の常微分方程式を解く一般的な方法は、1 階微分方程式系に変換して解くことです。この例では、Symbolic Math Toolbox™ を使用して 2 階 ODE を 1 階 ODE 系に変換します。その後、MATLAB ソルバー ode45
を使用して方程式系を求解します。
2 階 ODE から 1 階 ODE 系への書き換え
odeToVectorField
を使用してこの 2 階微分方程式を書き換えます。
変数の取り換えを使います。 および として、両方程式を微分すると、1 階微分方程式系が得られます。
syms y(t)
[V] = odeToVectorField(diff(y, 2) == (1 - y^2)*diff(y) - y)
V =
MATLAB 関数の生成
MATLAB ODE ソルバーはシンボリック式を入力として受け付けません。したがって、MATLAB ODE ソルバーを使用して方程式系を求解する前に MATLAB 関数に変換しなければなりません。この 1 階微分方程式系から MATLAB 関数を生成するには、matlabFunction
と V を入力として使用します。
M = matlabFunction(V,'vars', {'t','Y'})
M = function_handle with value:
@(t,Y)[Y(2);-(Y(1).^2-1.0).*Y(2)-Y(1)]
1 階 ODE 系の求解
この方程式系の解を求めるには、生成された MATLAB 関数を入力として使用し、MATLAB ode45
数値ソルバーを呼び出します。
sol = ode45(M,[0 20],[2 0]);
解のプロット
linspace
を使用して区間 [0,20] で 100 点を生成し、deval
を使用して各点の解を評価し、解をプロットします。
fplot(@(x)deval(sol,x,1), [0, 20])