Решите дифференциальное уравнение второго порядка численно

Этот пример показывает вам, как преобразовать дифференциальное уравнение второго порядка в систему дифференциальных уравнений, которые могут быть решены с помощью числового решателя ode45 MATLAB®.

Типичный подход к решению обыкновенных дифференциальных уравнений высшего порядка должен преобразовать их в системы дифференциальных уравнений первого порядка, и затем решить те системы. Пример использует Symbolic Math Toolbox™, чтобы преобразовать ОДУ второго порядка в систему ОДУ первого порядка. Затем это использует решатель MATLAB ode45, чтобы решить систему.

Перепишите ОДУ второго порядка как систему ОДУ первого порядка

Используйте odeToVectorField, чтобы переписать это дифференциальное уравнение второго порядка

dy2dt=(1-y2)dydt-y

использование замены переменных. Пусть y(t)=Y1и dydt=Y2 таким образом, что, дифференцируя оба уравнения мы получаем систему дифференциальных уравнений первого порядка.

dY1dt=Y2dY2dt=-(Y12-1)Y2-Y1

syms y(t)
[V] = odeToVectorField(diff(y, 2) == (1 - y^2)*diff(y) - y)
V = 

(Y2-Y12-1Y2-Y1)

Сгенерируйте функцию MATLAB

Решатели ОДУ 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])

Смотрите также

| | |