exponenta event banner

ddensd

Решение дифференциальных уравнений задержки (DDE) нейтрального типа

Описание

пример

sol = ddensd(ddefun,dely,delyp,history,tspan) интегрирует систему дифференциальных уравнений задержки нейтрального типа, которая имеет вид

y '(t) = f (t, y (t), y (dy1),..., y (dyp), y' (dyp1),..., y '(dypq))(1)
где

  • t - независимая переменная, представляющая время.

  • dii - любая из p задержек решения.

  • dypj - любая из q производных задержек.

sol = ddensd(ddefun,dely,delyp,history,tspan,options) заменяет параметры интеграции по умолчанию параметрами, указанными в options, структура, созданная с помощью ddeset функция.

Примеры

свернуть все

Решите следующие нейтральные DDE, представленные Полом, для.$0 \le t \le \pi$

$$y'(t) = 1 + y(t) - 2y(t/2)^2 - y'(t-\pi)$$

История решения для$y(t) = \cos(t)$.$t \le 0$

Создайте новый файл программы в редакторе. Этот файл будет содержать основную функцию и четыре локальные функции.

Определите DDE первого порядка как локальную функцию с именем ddefun.

function yp = ddefun(t,y,ydel,ypdel) 
    yp = 1 + y - 2*ydel^2 - ypdel;
end

Определите задержку решения как локальную функцию с именем dely.

function dy = dely(t,y) 
    dy = t/2;
end

Определите задержку производной как локальную функцию с именем delyp.

function dyp = delyp(t,y) 
    dyp = t-pi;
end

Определите историю решения как локальную функцию с именем history.

function y = history(t)
    y = cos(t);
end

Определение интервала интеграции и решение DDE с помощью ddensd. Добавьте этот код к основной функции.

tspan = [0 pi];
sol = ddensd(@ddefun,@dely,@delyp,@history,tspan);

Вычислите решение в 100 равноотстоящих точках между$0$ и. $\pi$Добавьте этот код к основной функции.

tn = linspace(0,pi);
yn = deval(sol,tn);

Постройте график результатов. Добавьте этот код к основной функции.

plot(tn,yn);
xlim([0 pi]);
ylim([-1.2 1.2]);
xlabel('time t');
ylabel('solution y');

Выполните всю программу для вычисления решения и отображения графика. Файл ddex4.m содержит полный код для этого примера. Для просмотра кода в редакторе введите edit ddex4 в командной строке.

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

свернуть все

Производная функция, заданная как дескриптор функции, синтаксис которой: yp = ddefun(t,y,ydel,ypdel). Аргументы для ddefun описаны в таблице ниже.

Аргумент ddefunОписание
tСкалярное значение, представляющее текущее значение времени t.
y Вектор, который представляет y (t) в  уравнении 1. Размер этого вектора: nоколо-1, где n - количество уравнений в системе, которую требуется решить.
ydelМатрица, столбцы которой ydel(:,i), представляют y (dyi). Размер этой матрицы: nоколо-p, где n - количество уравнений в системе, которую требуется решить, и p - число y (dy) членов в  уравнении 1.
ypdelМатрица, столбцы которой ypdel(:,j) представляют y '(dypj). Размер этой матрицы: nоколо-q, где n - количество уравнений в системе, которую требуется решить, и q - число членов y '(dip) в уравнении 1.
ypРезультат, возвращенный ddefun. Это nоколо-1 вектор, элементы которого представляют правую часть уравнения 1.

Задержки решения, заданные как дескриптор функции, который возвращает dy1,..., dyp в уравнении 1. В качестве альтернативы можно передавать постоянные задержки в виде вектора.

При указании dely как дескриптор функции, синтаксис должен быть dy = dely(t,y). Аргументы для этой функции описаны в таблице ниже.

Аргумент delyОписание
tСкалярное значение, представляющее текущее значение времени t.
yВектор, который представляет y (t) в  уравнении 1. Размер этого вектора: nоколо-1, где n - количество уравнений в системе, которую требуется решить.
dyВектор, возвращенный dely функция, значения которой являются задержками решения, dyi, в уравнении 1. Размер этого вектора: pоколо-1, где p - количество задержек решения в уравнении. Каждый элемент должен быть меньше или равен t.

Если вы хотите указать постоянные задержки решения, имеющие вид dyi = t - starti, то dely должен быть вектором, где dely(i) = starti. Каждое значение в этом векторе должно быть больше или равно нулю.

Если dy отсутствует в проблеме, установите dely кому [].

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

Задержки производных, заданные как дескриптор функции, который возвращает dyp1,..., dypq в уравнении 1. В качестве альтернативы можно передавать постоянные задержки в виде вектора.

Если delyp является дескриптором функции, его синтаксис должен быть dyp = delyp(t,y). Аргументы для этой функции описаны в таблице ниже.

аргумент delypОписание
tСкалярное значение, представляющее текущее значение времени t.
yВектор, который представляет y (t) в  уравнении 1. Размер этого вектора: nоколо-1, где n - количество уравнений в системе, которую требуется решить.
dypВектор, возвращенный delyp функция, значения которой являются производными задержками, dypj, в уравнении 1. Размер этого вектора должен быть qоколо-1, где q - число задержек решения, dypj, в уравнении. Каждый элемент dyp должно быть меньше t. Есть одно исключение из этого ограничения: если вы решаете начальное значение DDE, значение dyp может равняться t при t = t0. Дополнительные сведения см. в разделе Начальные значения Дифференциальные уравнения нейтральной задержки.

Если требуется указать постоянные задержки производной, имеющие вид dypj = t - startj, то delyp должен быть вектором, где delyp(j) = thej. Каждое значение в этом векторе должно быть больше нуля. Исключение из этого ограничения возникает при решении проблем с начальными значениями для DDE нейтрального типа. В таких случаях значение в delyp может равняться нулю при t = t0. Дополнительные сведения см. в разделе Начальные значения Дифференциальные уравнения нейтральной задержки.

Если dyp отсутствует в проблеме, установите delyp кому [].

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

История решения, указанная как дескриптор функции, вектор столбца, sol структура (из предыдущей интеграции) или массив ячеек. Это решение при tt0.

  • Если история зависит от времени, укажите историю решения как дескриптор функции, синтаксис которой: y = history(t). Эта функция возвращает nоколо-1 вектор, аппроксимирующий решение, y (t), для t < = t0. Длина этого вектора,n, - количество уравнений в системе, которую требуется решить.

  • Если y (t) является постоянным, можно указатьhistory как nоколо-1 вектор постоянных значений.

  • Если вы звоните ddensd чтобы продолжить предыдущую интеграцию до t0, можно указать историю в качестве выходных данных, sol, из предыдущей интеграции.

  • Если вы решаете начальное значение DDE, укажите историю как массив ячеек, {y0, yp0}. Первый элемент, y0, - вектор столбца начальных значений y (t0). Второй элемент, yp0, является вектором-столбцом, элементы которого являются начальными производными y '(t0). Эти векторы должны быть последовательными, что означает, что они удовлетворяют  уравнению 1 в t0. Дополнительные сведения см. в разделе Начальные значения Дифференциальные уравнения нейтральной задержки.

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

Интервал интегрирования, указанный как вектор [t0 tf]. Первый элемент, t0, - начальное значение t. Второй элемент, tf, является конечным значением t. Значение t0 должно быть меньше, чем tf.

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

Необязательные параметры интеграции, определенные как структура, созданная и возвращаемая ddeset функция. Некоторые часто используемые свойства: 'RelTol', 'AbsTol', и 'Events'. См. раздел ddeset справочная страница для получения дополнительной информации об указании options.

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

свернуть все

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

sol.xСетка, выбранная ddensd.
sol.yПриближение к y (t) в точках сетки.
sol.ypПриближение к y '(t) в точках сетки.
sol.solverВектор символов, идентифицирующий решатель, 'ddensd'.

Вы можете пройти sol в deval для оценки решения в определенных точках. Например, y = deval(sol, 0.5*(sol.x(1) + sol.x(end))) оценивает решение в середине интервала интегрирования.

Подробнее

свернуть все

Дифференциальные уравнения нейтральной задержки начального значения

Начальное значение DDE имеет dyi≥t0 и dypj≥t0 для всех i и j. При t = t0 все задержанные члены уменьшаются до y (dyi) = y (t0) и y '(dypj) = y' (t0 ):

y '(t0) = f (t0, y (t0), y (t0),..., y (t0), y' (t0),..., y '(t0))(2)
Для t > t0 все задержки производных должны удовлетворять dyp < t.

При определении начального значения нейтральных DDE необходимо ввести y '(t0) в ddensd. Для этого укажите history как массив ячеек {Y0,YP0}. Здесь, Y0 - вектор столбца начальных значений y (t0) иYP0 - вектор-столбец исходных производных, y '(t0). Эти векторы должны быть последовательными, что означает, что они удовлетворяют уравнению 2 в t0.

Алгоритмы

Для получения информации об алгоритме, используемом в этом решателе, см. раздел Shampine [2].

Ссылки

[1] Пол, К.А.Х. «Тестовый набор функциональных дифференциальных уравнений». Отчеты числового анализа. № 243. Манчестер, Великобритания: факультет математики, Манчестерский университет, 1994 год.

[2] Шампин, Л.Ф. «Диссипативные приближения к нейтральным DDE». Прикладная математика и вычисления. Том 203, номер 2, 2008, стр. 641-648.

Представлен в R2012b