ddensd

Решите дифференциальные уравнения с запаздывающим аргументом (DDEs) нейтрального типа

Синтаксис

sol = ddensd(ddefun,dely,delyp,history,tspan)
sol = ddensd(ddefun,dely,delyp,history,tspan,options)

Описание

пример

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, представленный Полом, для.

История решения для.

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

Задайте 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 равномерно распределенных точках между и. Добавьте этот код в основную функцию.

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-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). Аргументы для этой функции описаны в приведенной ниже таблице.

Аргумент поставкиОписание
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. Каждое значение в этом векторе должно быть больше, чем нуль. Исключение к этому ограничению происходит, когда вы решаете задачи с начальными значениями для DDEs нейтрального типа. В таких случаях значение в delyp может равняться нулю в t = t 0. Смотрите Начальное значение Нейтральные Дифференциальные уравнения с запаздывающим аргументом для получения дополнительной информации.

Если 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. Смотрите Начальное значение Нейтральные Дифференциальные уравнения с запаздывающим аргументом для получения дополнительной информации.

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

Интервал интегрирования, заданного как векторный [t0 tf]. Первый элемент, t0, является начальным значением t. Второй элемент, tf, является окончательным значением t. Значение t0 должно быть меньшим количеством than 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 it0 и dyp jt0 для всего i и j. В t = t 0, все задержанные условия уменьшают до y (dy i) = y (t 0) и y' (dyp j) = y' (t 0):

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

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

Алгоритмы

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

Ссылки

[1] Пол, C.A.H. “Набор тестов функциональных дифференциальных уравнений”. Числовые аналитические отчеты. № 243. Манчестер, Великобритания: математический отдел, Манчестерский университет, 1994.

[2] Шемпин, L.F. “Диссипативные Приближения к Нейтральному DDEs”. Applied Mathematics & Computation. Издание 203, Номер 2, 2008, стр 641–648.

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