exponenta event banner

ode23t

Решение умеренно жестких ОДУ и дисковых полок - трапециевидное правило

Описание

пример

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

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

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

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

Примеры

свернуть все

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

Решить ОДУ

y′=-10t.

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

tspan = [0 2];
y0 = 1;
[t,y] = ode23t(@(t,y) -10*t, tspan, y0);

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

plot(t,y,'-o')

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

Примером жесткой системы уравнений являются уравнения ван дер Пол в релаксационных колебаниях. Предельный цикл имеет области, где компоненты раствора меняются медленно, и проблема довольно жесткая, чередуясь с областями очень резких изменений, где она не является жесткой.

Система уравнений:

$$\begin{array}{cl} y_1' &= y_2\\y_2' &= 1000(1-y_1^2)y_2-y_1\end{array}$$

Начальными условиями являются$y_1(0)=2$ и. $y_2(0)=0$Функция vdp1000 поставляется с MATLAB ® и кодирует уравнения.

function dydt = vdp1000(t,y)
%VDP1000  Evaluate the van der Pol ODEs for mu = 1000.
%
%   See also ODE15S, ODE23S, ODE23T, ODE23TB.

%   Jacek Kierzenka and Lawrence F. Shampine
%   Copyright 1984-2014 The MathWorks, Inc.

dydt = [y(2); 1000*(1-y(1)^2)*y(2)-y(1)];

Решение этой системы с помощью ode45 с допусками относительных и абсолютных ошибок по умолчанию (1e-3 и 1e-6, соответственно) является чрезвычайно медленным, требующим нескольких минут для решения и построения графика решения. ode45 требует миллионов временных шагов, чтобы завершить интеграцию, из-за областей жесткости, где она пытается выполнить допуски.

Это график решения, полученного ode45, что требует длительного времени для вычисления. Обратите внимание на огромное количество временных шагов, необходимых для прохождения через области жесткости.

Решить жесткую систему с помощью ode23t решатель, а затем постройте график первого столбца решения y по моментам времени t. ode23t решатель проходит через жесткие области с гораздо меньшим количеством шагов, чем ode45.

[t,y] = ode23t(@vdp1000,[0 3000],[2 0]);
plot(t,y(:,1),'-o')

ode23t работает только с функциями, использующими два входных аргумента, 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);

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

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

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

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

ode15s решатель - хороший первый выбор для большинства жестких задач. Однако другие жесткие решатели могут быть более эффективными для определенных типов проблем. В этом примере решается жесткое тестовое уравнение с использованием всех четырех жестких решателей ОДУ.

Рассмотрим уравнение теста

y′=-λy.

Уравнение становится все более жестким по мере увеличения величины λ. Используйте λ = 1 × 109 и исходное условие y (0) = 1 в течение интервала времени[0 0.5]. С этими значениями проблема достаточно жесткая, что ode45 и ode23 бороться за интеграцию уравнения. Кроме того, используйте odeset для передачи постоянного J=∂f∂y=-λ Якобиана и включения отображения статистики решателя.

lambda = 1e9;
y0 = 1;
tspan = [0 0.5];
opts = odeset('Jacobian',-lambda,'Stats','on');

Решите уравнение с помощью ode15s, ode23s, ode23t, и ode23tb. Создайте вложенные графики для сравнения.

subplot(2,2,1)
tic, ode15s(@(t,y) -lambda*y, tspan, y0, opts), toc
104 successful steps
1 failed attempts
212 function evaluations
0 partial derivatives
21 LU decompositions
210 solutions of linear systems
Elapsed time is 1.338321 seconds.
title('ode15s')
subplot(2,2,2)
tic, ode23s(@(t,y) -lambda*y, tspan, y0, opts), toc
63 successful steps
0 failed attempts
191 function evaluations
0 partial derivatives
63 LU decompositions
189 solutions of linear systems
Elapsed time is 0.258983 seconds.
title('ode23s')
subplot(2,2,3)
tic, ode23t(@(t,y) -lambda*y, tspan, y0, opts), toc
95 successful steps
0 failed attempts
125 function evaluations
0 partial derivatives
28 LU decompositions
123 solutions of linear systems
Elapsed time is 0.406110 seconds.
title('ode23t')
subplot(2,2,4)
tic, ode23tb(@(t,y) -lambda*y, tspan, y0, opts), toc
71 successful steps
0 failed attempts
167 function evaluations
0 partial derivatives
23 LU decompositions
236 solutions of linear systems
Elapsed time is 0.355101 seconds.
title('ode23tb')

Figure contains 4 axes. Axes 1 with title ode15s contains 2 objects of type line. Axes 2 with title ode23s contains 2 objects of type line. Axes 3 with title ode23t contains 2 objects of type line. Axes 4 with title ode23tb contains 2 objects of type line.

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

Для общих жестких задач производительность жестких решателей варьируется в зависимости от формата задачи и заданных опций. Предоставление матрицы Якобиана или шаблона разреженности всегда повышает эффективность решателя для жестких проблем. Но поскольку жесткие решатели используют якобиан по-разному, улучшение может значительно различаться. Практически говоря, если система уравнений очень велика или должна быть решена много раз, то стоит исследовать производительность различных решателей, чтобы минимизировать время выполнения.

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

свернуть все

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

Функция 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 вариант. Значения указывают, какое событие обнаружил решатель.

Алгоритмы

ode23t - реализация трапециевидного правила с использованием «свободного» интерполятора. Этот решатель предпочтительнее, чем ode15s если проблема только умеренно жесткая и вам нужно решение без численного демпфирования. ode23t также может решать дифференциальные алгебраические уравнения (DAE) [1], [2].

Ссылки

[1] Шампин, Л. Ф., М. У. Райхельт и Я. А. Кьерзенка, «Решение Index-1 DAE в MATLAB и Simulink», SIAM Review, том 41, 1999, стр. 538-552.

[2] Шампин, Л. Ф. и М. Е. Осия, «Анализ и реализация TR-BDF2,» Прикладная численная математика 20, 1996.

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