exponenta event banner

ode23

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

Описание

пример

[t,y] = ode23(odefun,tspan,y0), где tspan = [t0 tf], интегрирует систему дифференциальных уравнений y '= f (t, y) изt0 кому tf с начальными условиями y0. Каждая строка в массиве решений y соответствует значению, возвращенному в векторе столбца t.

Все решатели ODE MATLAB ® могут решать системы уравнений вида y '= f (t, y) или задачи, которые включают массовую матрицу M (t, y) y' = f (t, y). Все решатели используют сходные синтаксисы. ode23s решатель может решить проблемы с массовой матрицей, только если массовая матрица постоянна. ode15s и ode23t может решать задачи с массовой матрицей, которая является сингулярной, известной как дифференциально-алгебраические уравнения (DAE). Задайте массовую матрицу с помощью Mass вариант odeset.

пример

[t,y] = ode23(odefun,tspan,y0,options) также использует настройки интеграции, определенные options, который является аргументом, созданным с помощью odeset функция. Например, используйте AbsTol и RelTol для задания абсолютных и относительных допусков ошибок или Mass для предоставления матрицы массы.

[t,y,te,ye,ie] = ode23(odefun,tspan,y0,options) дополнительно находит, где функции (t, y), называемые функциями события, равны нулю. В выходных данных ,te - время события, ye является решением во время события, и ie - индекс инициируемого события.

Для каждой функции события укажите, должна ли интеграция завершаться нулем и имеет ли значение направление пересечения нуля. Для этого установите 'Events' свойство функции, например myEventFcn или @myEventFcnи создание соответствующей функции: [value,isterminal,direction] = myEventFcn(t,y). Дополнительные сведения см. в разделе Расположение события ОДУ.

sol = ode23(___) возвращает структуру, которую можно использовать с deval для оценки решения в любой точке интервала [t0 tf]. В предыдущих синтаксисах можно использовать любую комбинацию входных аргументов.

Примеры

свернуть все

Простые ОДУ, имеющие один компонент решения, могут быть указаны как анонимная функция в вызове решателя. Анонимная функция должна принимать два входа (t,y) даже если один из входов не используется.

Решить ОДУ

y′=2t.

Использовать интервал времени [0,5] и исходное условие y0 = 0.

tspan = [0 5];
y0 = 0;
[t,y] = ode23(@(t,y) 2*t, tspan, y0);

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

plot(t,y,'-o')

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

Уравнение ван дер Пол является ОДУ второго порядка

$$y''_1 - \mu \left( 1 - y_1^2\right) y'_1+y_1=0,$$

где$\mu > 0$ - скалярный параметр. Перепишите это уравнение как систему ОДУ первого порядка, произведя подстановку. $y'_1 = y_2$Результирующей системой ОДУ первого порядка является

$$
\begin{array}{cl}
y'_1 &= y_2\\
y'_2 &= \mu (1-y_1^2) y_2 - y_1.\end{array}
$$

Файл функций vdp1.m представляет уравнение ван дер Пол с использованием. $\mu = 1$Переменные$y_1$ и $y_2$являются записями 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)];

Решить ОДУ с помощью ode23 функция на временном интервале [0 20] с начальными значениями [2 0]. Результирующий выходной сигнал представляет собой вектор столбца точек времени t и массив решений y. Каждая строка в y соответствует времени, возвращенному в соответствующей строке t. Первый столбец y соответствует, $y_1$а второй столбец -.$y_2$

[t,y] = ode23(@vdp1,[0 20],[2; 0]);

Постройте график решений для$y_1$ и$y_2$ против t.

plot(t,y(:,1),'-o',t,y(:,2),'-o')
title('Solution of van der Pol Equation (\mu = 1) with ODE23');
xlabel('Time t');
ylabel('Solution y');
legend('y_1','y_2')

ode23 работает только с функциями, использующими два входных аргумента, t и y. Однако можно передать дополнительные параметры, определив их вне функции и передав при указании дескриптора функции.

Решить ОДУ

$$y'' = \frac{A}{B} t y.$$

Переписывание уравнения как системы первого порядка дает

$$\begin{array}{cl} y'_1 &= y_2\\ y'_2 &= \frac{A}{B} t y_1.
\end{array}$$

odefcn.m представляет эту систему уравнений как функцию, которая принимает четыре входных аргумента: t, y, A, и B.

function dydt = odefcn(t,y,A,B)
dydt = zeros(2,1);
dydt(1) = y(2);
dydt(2) = (A/B)*t.*y(1);

Решение ОДУ с помощью ode23. Укажите дескриптор функции таким образом, чтобы он передавал предопределенные значения для A и B кому odefcn.

A = 1;
B = 2;
tspan = [0 5];
y0 = [0 0.01];
[t,y] = ode23(@(t,y) odefcn(t,y,A,B), tspan, y0);

Постройте график результатов.

plot(t,y(:,1),'-o',t,y(:,2),'-.')

По сравнению с ode45, ode23 решатель лучше подходит для решения проблем с грубыми допусками ошибок.

Сравнение производительности ode45 и ode23 путем решения умеренно-жестких ОДУ

y′=-λy

для λ = 1000. Этот ОДУ представляет собой тестовое уравнение, которое становится все более жестким по мере увеличения λ. Использоватьodeset для включения отображения статистики решателя.

opts = odeset('Stats','on');
tspan = [0 2];
y0 = 1;
lambda = 1e3;
subplot(1,2,1)
tic, ode45(@(t,y) -lambda*y, tspan, y0, opts), toc
615 successful steps
35 failed attempts
3901 function evaluations
Elapsed time is 1.354539 seconds.
title('ode45')
subplot(1,2,2)
tic, ode23(@(t,y) -lambda*y, tspan, y0, opts), toc
822 successful steps
2 failed attempts
2473 function evaluations
Elapsed time is 0.548596 seconds.
title('ode23')

Figure contains 2 axes. Axes 1 with title ode45 contains 2 objects of type line. Axes 2 with title ode23 contains 2 objects of type line.

Для этой умеренно жесткой проблемы, ode23 выполняется немного быстрее, чем ode45 а также имеет меньше неудачных шагов. Размеры шагов, принятые ode45 и ode23 для этой задачи ограничены требованиями к стабильности уравнения, а не точностью. С момента принятия мер ode23 дешевле, чем с ode45, ode23 решатель выполняется быстрее, даже если требуется больше шагов.

Входные аргументы

свернуть все

Функции для решения, определяемые как дескриптор функции, определяющий функции, подлежащие интеграции.

Функция dydt = odefun(t,y), для скаляра t и вектор-столбец y, должен возвращать вектор столбца dydt типа данных single или double что соответствует f (t, y ).odefun должен принимать оба входных аргумента, t и y, даже если один из аргументов не используется в функции.

Например, для решения y '= 5y − 3 используйте функцию:

function dydt = odefun(t,y)
dydt = 5*y-3;

Для системы уравнений выход odefun является вектором. Каждый элемент вектора является решением одного уравнения. Например, для решения

y '1 = y1 + 2y2y' 2 = 3y1 + 2y2

используйте функцию:

function dydt = odefun(t,y)
dydt = zeros(2,1);
dydt(1) = y(1)+2*y(2);
dydt(2) = 3*y(1)+2*y(2);

Для получения информации о предоставлении дополнительных параметров функции odefun, см. раздел Параметризация функций.

Пример: @myFcn

Типы данных: function_handle

Интервал интегрирования, заданный как вектор. Как минимум, tspan должен быть двухэлементным вектором [t0 tf] задание начального и конечного времени. Получение решений в определенное время между t0 и tf, используйте более длинный вектор формы [t0,t1,t2,...,tf]. Элементы в tspan должно быть все увеличивается или все уменьшается.

Решатель накладывает начальные условия, заданные y0 в начальный момент времени tspan(1), затем интегрируется из tspan(1) кому tspan(end):

  • Если tspan имеет два элемента, [t0 tf]затем решатель возвращает решение, оцененное на каждом шаге внутренней интеграции в пределах интервала.

  • Если tspan имеет более двух элементов [t0,t1,t2,...,tf]затем решатель возвращает решение, вычисленное в заданных точках. Однако решатель не выполняет точного шага к каждой точке, указанной в tspan. Вместо этого решатель использует собственные внутренние шаги для вычисления решения, затем оценивает решение в запрошенных точках в tspan. Решения, полученные в указанных точках, имеют тот же порядок точности, что и решения, вычисленные на каждом внутреннем этапе.

    Указание нескольких промежуточных точек мало влияет на эффективность вычислений, но для больших систем это может повлиять на управление памятью.

Значения tspan используются решателем для вычисления подходящих значений для InitialStep и MaxStep:

  • Если tspan содержит несколько промежуточных точек [t0,t1,t2,...,tf], то указанные баллы дают указание на шкалу для задачи, которая может повлиять на значение InitialStep используется решателем. Следовательно, решение, полученное решателем, может быть различным в зависимости от указания tspan как двухэлементный вектор или как вектор с промежуточными точками.

  • Начальное и конечное значения в tspan используются для расчета максимального размера шага MaxStep. Поэтому изменение начальных или окончательных значений в tspan может привести к решателю, используя другую последовательность шагов, которая может изменить решение.

Пример: [1 10]

Пример: [1 3 5 7 9 10]

Типы данных: single | double

Начальные условия, заданные как вектор. y0 должна быть той же длины, что и векторный выход odefun, так что y0 содержит начальное условие для каждого уравнения, определенного в odefun.

Типы данных: single | double

Структура опций, заданная как массив структуры. Используйте odeset для создания или изменения структуры опций. Список опций, совместимых с каждым решателем, см. в разделе Сводка опций ОДУ.

Пример: options = odeset('RelTol',1e-5,'Stats','on','OutputFcn',@odeplot) указывает относительный допуск ошибки 1e-5, включает отображение статистики решателя и задает функцию вывода @odeplot для построения графика решения по мере его вычисления.

Типы данных: struct

Выходные аргументы

свернуть все

Вычислительные точки, возвращаемые в виде вектора столбца.

  • Если tspan содержит два элемента, [t0 tf], то t содержит внутренние точки оценки, используемые для выполнения интеграции.

  • Если tspan содержит более двух элементов, затем t является таким же, как tspan.

Решения, возвращенные в виде массива. Каждая строка в y соответствует решению при значении, возвращенном в соответствующей строке t.

Время событий, возвращаемое в виде вектора столбца. Время события в te соответствуют решениям, возвращенным в ye, и ie указывает, какое событие произошло.

Решение во время событий, возвращаемое в виде массива. Время события в te соответствуют решениям, возвращенным в ye, и ie указывает, какое событие произошло.

Индекс инициированной функции события, возвращаемый в виде вектора столбца. Время события в te соответствуют решениям, возвращенным в ye, и ie указывает, какое событие произошло.

Структура для анализа, возвращаемая в виде массива структуры. Используйте эту структуру с deval функция для оценки решения в любой точке интервала [t0 tf]. sol структурный массив всегда включает следующие поля:

Поле структурыОписание

sol.x

Вектор строки шагов, выбранных решателем.

sol.y

Решения. Каждый столбец sol.y(:,i) содержит решение в момент времени sol.x(i).

sol.solver

Имя решателя.

Кроме того, если указать Events параметр и события обнаружены, затем sol также включает следующие поля:

Поле структурыОписание

sol.xe

Указывает, когда произошли события. sol.xe(end) содержит точную точку события терминала, если она имеется.

sol.ye

Решения, соответствующие событиям в sol.xe.

sol.ie

Индексы в векторе, возвращаемые функцией, указанной в Events вариант. Значения указывают, какое событие обнаружил решатель.

Алгоритмы

ode23 является реализацией явной пары Рунге-Кутта (2,3) Богацки и Шампина. Это может быть более эффективным, чем ode45 при грубых допусках и при наличии умеренной жесткости. ode23 является одношаговым решателем [1], [2].

Ссылки

[1] Богацки, П. и Л. Ф. Шампин, «A 3 (2) пара формул Рунге-Кутты», Appl. Math. Letters, Vol. 2, 1989, pp. 321-325 .

[2] Шампин, Л. Ф. и М. У. Райхельт, «The MATLAB ODE Suite», SIAM Journal on Scientific Computing, Vol. 18, 1997, pp. 1-22.

Расширенные возможности

.
Представлен до R2006a