ddensd

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

Описание

пример

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

y '(t) = f (t, y (t), y (dy 1),..., y (dy p), y' (dyp 1),..., y '(dyp q))(1)
где

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

  • dy i является любой из p задержек решения.

  • dyp j является любой из 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 описаны в таблице ниже.

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

Задержки решения, заданные как указатель на функцию, который возвращает dy 1,... dy p в Уравнении 1. Также можно передать постоянные задержки в виде вектора.

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

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

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

Если dy нет в задаче, задайте dely на [].

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

Производные задержки, заданные как указатель на функцию, который возвращает dyp 1,... dyp q в Уравнении 1. Также можно передать постоянные задержки в виде вектора.

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

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

Если вы хотите задать постоянные производные задержки, имеющие вид dyp j = t - τ j, то delyp должен быть вектором, где delyp(j) = τ j. Каждое значение в этом векторе должно быть больше нуля. Исключение из этого ограничения возникает, когда вы решаете проблемы с начальным значением для DDE нейтрального типа. В таких случаях значение в delyp может равняться нулю в t = t 0. Смотрите Дифференциальные уравнения с запаздывающим аргументом Initial Value Neutral для получения дополнительной информации.

Если dyp нет в задаче, задайте delyp на [].

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

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

Подробнее о

свернуть все

Нейтраль начальных Дифференциальных уравнений с запаздывающим аргументом

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

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

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

Алгоритмы

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

Ссылки

[1] Пол, К.А.Х. Тестовый набор функциональных дифференциальных уравнений. Отчеты численного анализа. № 243. Manchester, UK: Math Department, University of Manchester, 1994.

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

Введенный в R2012b