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

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

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

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

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

d2ydt2=(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)[Y (2); - (Y (1) ^ 2 - 1) * Y (2) - Y (1)]

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

Решатели MATLAB ODE не принимают символьные выражения как вход. Поэтому, прежде чем вы сможете использовать решатель MATLAB ODE для решения системы, необходимо преобразовать эту систему в функцию 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)]

Решение системы ОДУ первого порядка

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

sol = ode45(M,[0 20],[2 0]);

Постройте график решения

Постройте график решения с помощью linspace сгенерировать 100 точек в интервале [0,20] и deval для оценки решения для каждой точки.

fplot(@(x)deval(sol,x,1), [0, 20])

Figure contains an axes. The axes contains an object of type functionline.

См. также

| | |

Для просмотра документации необходимо авторизоваться на сайте