exponenta event banner

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

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

Типичным подходом к решению обыкновенных дифференциальных уравнений высшего порядка является преобразование их в системы дифференциальных уравнений первого порядка, а затем решение этих систем. В примере используется символьная математическая 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

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

См. также

| | |