Этот пример показывает вам, как преобразовать дифференциальное уравнение второго порядка в систему дифференциальных уравнений, которые могут быть решены с помощью числового решателя ode45
MATLAB®.
Типичный подход к решению обыкновенных дифференциальных уравнений высшего порядка должен преобразовать их в системы дифференциальных уравнений первого порядка, и затем решить те системы. Пример использует Symbolic Math Toolbox™, чтобы преобразовать ОДУ второго порядка в систему ОДУ первого порядка. Затем это использует решатель MATLAB ode45
, чтобы решить систему.
Используйте odeToVectorField
, чтобы переписать это дифференциальное уравнение второго порядка
использование замены переменных. Пусть и таким образом, что, дифференцируя оба уравнения мы получаем систему дифференциальных уравнений первого порядка.
syms y(t)
[V] = odeToVectorField(diff(y, 2) == (1 - y^2)*diff(y) - y)
V =
Решатели ОДУ MATLAB не принимают символьные выражения как вход. Поэтому, прежде чем можно использовать решатель ОДУ MATLAB, чтобы решить систему, необходимо преобразовать ту систему в функцию MATLAB. Сгенерируйте функцию 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)]
Чтобы решить эту систему, вызовите ode45
MATLAB числовой решатель с помощью сгенерированной функции MATLAB в качестве входа.
sol = ode45(M,[0 20],[2 0]);
Постройте решение с помощью linspace
, чтобы сгенерировать 100 точек в интервале [0,20] и deval
, чтобы оценить решение для каждой точки.
fplot(@(x)deval(sol,x,1), [0, 20])