Решите дифференциальные уравнения с задержкой (DDE) с постоянными задержками
sol = dde23(ddefun,lags,history,tspan)
sol = dde23(ddefun,lags,history,tspan,options)
| Указатель на функцию, который оценивает правую сторону дифференциальных уравнений . Функция должна иметь форму dydt = ddefun(t,y,Z) где |
| Вектор постоянных, положительных задержек τ 1,..., τk. |
| Задайте
|
| Интервал интегрирования из |
| Необязательный аргумент интегрирования. Структура, которую вы создаете с помощью |
sol = dde23(ddefun,lags,history,tspan)
интегрирует систему DDE
на интервале [t 0, tf], где τ 1,..., τk постоянны, положительные задержки и t 0, tf. Входной параметр, ddefun
, является указателем на функцию.
Параметризация функций объясняет, как предоставить дополнительные параметры функции ddefun
, при необходимости.
dde23
возвращает решение как структуру sol
. Используйте вспомогательную функцию deval
и выходные sol
для оценки решения в конкретных точках tint
в интервале tspan = [t0,tf]
.
yint = deval(sol,tint)
Структура sol
возвращается по dde23
имеет следующие поля.
| Mesh, выбранная по |
| Приближение к y (x) в точках mesh в |
| Приближение к y ′ (x) в точках mesh |
| Имя решателя, |
sol = dde23(ddefun,lags,history,tspan,options)
решает, как описано выше, со свойствами интегрирования по умолчанию, замененными значениями в options
, аргумент, созданный с помощью ddeset
. Посмотрите ddeset
и Решение дифференциальных уравнений с запаздывающим аргументом для получения дополнительной информации.
Обычно используемые опции скалярны относительной погрешности допуска 'RelTol'
(1e-3
по умолчанию) и вектор абсолютных допусков ошибок 'AbsTol'
(все компоненты 1e-6
по умолчанию).
Используйте 'Jumps'
опция для решения проблем с разрывами в истории или решении. Установите эту опцию в вектор, который содержит местоположения разрывов в решении до t0
(история) или в коэффициентах уравнений при известных значениях t после t0
.
Используйте 'Events'
опция, чтобы задать функцию, которая dde23
вызывает, чтобы найти, где функции исчезнуть. Эта функция должна иметь вид
[value,isterminal,direction] = events(t,y,Z)
и содержать функцию события для каждого тестируемого события. Для k
первая функция события в events
:
value(k)
- значение k
первая функция события.
isterminal(k) = 1
если вы хотите, чтобы интегрирование завершилось в нуле этой функции события и 0
в противном случае.
direction(k) = 0
если хотите dde23
чтобы вычислить все нули этой функции события, +1
если только нули, где функция события увеличивается, и -1
если только нули, где функция события уменьшается.
Если вы задаете 'Events'
опция и события обнаруживаются, структура output sol
также включает поля:
| Вектор-строка с расположениями всех событий, т.е. время, когда функция события исчезла |
| Матрица, столбцы которой являются значениями решения, соответствующими временам в |
| Вектор, содержащий индексы, которые определяют, какое событие произошло в соответствующее время в |
Этот пример решает DDE на интервале [0, 5] с лагами 1 и 0,2. Функция ddex1de
вычисляет дифференциальные уравнения с запаздывающим аргументом и ddex1hist
вычисляет историю для t <= 0
.
Примечание
Файл, ddex1.m
, содержит полный код для этого примера. Чтобы увидеть код в редакторе, введите edit ddex1
в командной строке. Чтобы запустить его, введите ddex1
в командной строке.
sol = dde23(@ddex1de,[1, 0.2],@ddex1hist,[0, 5]);
Этот код оценивает решение в 100 одинаково разнесенных точках в интервале [0,5]
, затем строит график результата.
tint = linspace(0,5); yint = deval(sol,tint); plot(tint,yint);
ddex1
показывает, как можно кодировать эту проблему с помощью локальных функций. Для получения дополнительных примеров смотрите ddex2
.
dde23
отслеживает разрывы и интегрируется с явной парой Runge-Kutta (2,3) и интерполяцией ode23
. Он использует итерацию, чтобы сделать шаги дольше, чем лаги.
[1] шемпин, L.F. and S. Thompson, «Solving DDEs in MATLAB», Applied Numerical Mathematics, Vol. 37, 2001, pp. 441-458.
[2] кирженка, J., L.F. Shampine, and S. Thompson, «Решение дифференциальных уравнений с запаздывающим аргументом с dde23»