exponenta event banner

ode113

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

Описание

пример

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

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

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

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

Примеры

свернуть все

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

Решить ОДУ

y′=2t.

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

tspan = [0 5];
y0 = 0;
[t,y] = ode113(@(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)];

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

[t,y] = ode113(@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 ODE113');
xlabel('Time t');
ylabel('Solution y');
legend('y_1','y_2')

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

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

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

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

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

По сравнению с ode45, ode113 решатель лучше подходит для решения проблем со строгими допусками ошибок. Общая ситуация, когда ode113 excels - в задачах орбитальной динамики, где кривая решения гладкая и требует высокой точности.

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

$$\begin{array}{cl} x'' &= -x/r^3\\ y'' &= -y/r^3,\end{array}$$

где

$$r = \sqrt{x^2+y^2}.$$

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

$$\begin{array}{cl} y_1 &= x\\ y_2 &= x'\\ y_3 &= y\\ y_4 &=
y'.\end{array}$$

Замены создают систему первого порядка.

$$\begin{array}{cl} y'_1 &= y_2\\ y'_2 &= -y_1/r^3\\ y'_3 &= y_4 \\ y'_4
&= -y_3/r^3.\end{array}$$

Функция twobodyode кодирует систему уравнений для задачи о двух телах.

function dy = twobodyode(t,y)
% Two body problem with one mass much larger than the other.
r = sqrt(y(1)^2 + y(3)^2);
dy = [y(2); 
    -y(1)/r^3;
    y(4);
    -y(3)/r^3];

Сохранить twobodyode.m в рабочей папке, затем решить ОДУ с помощью ode113. Использовать строгие допуски ошибок 1e-13 для RelTol и 1e-14 для AbsTol.

opts = odeset('Reltol',1e-13,'AbsTol',1e-14,'Stats','on');
tspan = [0 10*pi];
y0 = [2 0 0 0.5];

[t,y] = ode113(@twobodyode, tspan, y0, opts);
plot(t,y)
legend('x','x''','y','y''','Location','SouthEast')
title('Position and Velocity Components')
924 successful steps
4 failed attempts
1853 function evaluations

figure
plot(y(:,1),y(:,3),'-o',0,0,'ro')
axis equal
title('Orbit of Smaller Mass')

По сравнению с ode45, ode113 решатель способен получить решение быстрее и с меньшим количеством оценок функций.

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

свернуть все

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

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

Алгоритмы

ode113 представляет собой решатель с переменным шагом, переменным порядком (VSVO) Adams-Bashforth-Moulton PECE порядков, 1 к 13. Наивысший использованный порядок представляется равным 12, однако формула порядка 13 используется для формирования оценки ошибки, и функция выполняет локальную экстраполяцию для продвижения интегрирования в порядке 13.

ode113 может быть более эффективным, чем ode45 при жестких допусках или если функция ОДУ является особенно дорогостоящей для оценки. ode113 является многоступенчатым решателем - решения обычно требуются в несколько предыдущих моментов времени для вычисления текущего решения [1], [2].

Ссылки

[1] Шампин, Л. Ф. и М. К. Гордон, Компьютерное решение обычных дифференциальных уравнений: задача начального значения, В. Х. Фриман, Сан-Франциско , 1975.

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

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