Эта страница содержит два примера решения nonstiff обыкновенных дифференциальных уравнений с использованием ode45. MATLAB ® имеет три решателя для некомпетентных ОДУ.
ode45
ode23
ode113
Для большинства нестифных проблем, ode45 выступает лучше всех. Однако ode23 рекомендуется для проблем, которые допускают несколько более жесткую погрешность или при наличии умеренной жесткости. Аналогично, ode113 может быть более эффективным, чем ode45 для проблем со строгими допусками ошибок.
Если решатели, не принимающие решения, занимают много времени, чтобы решить проблему или последовательно проваливают интеграцию, то проблема может быть жесткой. Дополнительные сведения см. в разделе Решение жестких ОДУ.
Уравнение ван дер Пол является ОДУ второго порядка

где
- скалярный параметр. Перепишите это уравнение как систему ОДУ первого порядка, произведя подстановку.
Результирующей системой ОДУ первого порядка является

Система ОДУ должна быть закодирована в функциональный файл, который может использоваться решателем ОДУ. Общая функциональная сигнатура функции ОДУ:
dydt = odefun(t,y)
То есть функция должна принимать оба t и y в качестве входных данных, даже если он не использует t для любых вычислений.
Файл функций vdp1.m кодирует уравнение ван дер Пол с помощью.
Переменные
и
представлены y(1) и y(2)и вектор двухэлементного столбца dydt содержит выражения для
и.
function dydt = vdp1(t,y) %VDP1 Evaluate the van der Pol ODEs for mu = 1 % % See also ODE113, ODE23, ODE45. % Jacek Kierzenka and Lawrence F. Shampine % Copyright 1984-2014 The MathWorks, Inc. dydt = [y(2); (1-y(1)^2)*y(2)-y(1)];
Решить ОДУ с помощью ode45 функция на временном интервале [0 20] с начальными значениями [2 0]. Выходные данные представляют собой вектор столбца точек времени t и массив решений y. Каждая строка в y соответствует времени, возвращенному в соответствующей строке t. Первый столбец y соответствует,
а второй столбец -.
[t,y] = ode45(@vdp1,[0 20],[2; 0]);
Постройте график решений для
и
против t.
plot(t,y(:,1),'-o',t,y(:,2),'-o') title('Solution of van der Pol Equation (\mu = 1) using ODE45'); xlabel('Time t'); ylabel('Solution y'); legend('y_1','y_2')

vdpode функция решает ту же задачу, но принимает заданное пользователем значение для.
Уравнения ван дер Пол становятся жесткими по мере
увеличения. Например, со значением
необходимо использовать жесткий решатель, такой как ode15s для решения системы.
Уравнения Эйлера для жесткого тела без внешних сил являются стандартной тестовой задачей для решателей ОДУ, предназначенных для нетипичных задач.
Уравнения:

Файл функций rigidode определяет и решает эту систему уравнений первого порядка за интервал времени [0 12], используя вектор исходных условий [0; 1; 1] соответствующие начальным значениям,, 
и.
Локальная функция f(t,y) кодирует систему уравнений.
rigidode требования ode45 без выходных аргументов, поэтому решатель использует функцию вывода по умолчанию odeplot для автоматического построения графика точек решения после каждого шага.
function rigidode %RIGIDODE Euler equations of a rigid body without external forces. % A standard test problem for non-stiff solvers proposed by Krogh. The % analytical solutions are Jacobian elliptic functions, accessible in % MATLAB. The interval here is about 1.5 periods; it is that for which % solutions are plotted on p. 243 of Shampine and Gordon. % % L. F. Shampine and M. K. Gordon, Computer Solution of Ordinary % Differential Equations, W.H. Freeman & Co., 1975. % % See also ODE45, ODE23, ODE113, FUNCTION_HANDLE. % Mark W. Reichelt and Lawrence F. Shampine, 3-23-94, 4-19-94 % Copyright 1984-2014 The MathWorks, Inc. tspan = [0 12]; y0 = [0; 1; 1]; % solve the problem using ODE45 figure; ode45(@f,tspan,y0); % -------------------------------------------------------------------------- function dydt = f(t,y) dydt = [ y(2)*y(3) -y(1)*y(3) -0.51*y(1)*y(2) ];
Решить nonstiff Эйлер уравнения, вызвав rigidode функция.
rigidode title('Solution of Rigid Body w/o External Forces using ODE45') legend('y_1','y_2','y_3','Location','Best')
