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