Решите дифференциальные уравнения с запаздывающим аргументом (DDEs) нейтрального типа
интегрирует систему дифференциальных уравнений с запаздывающим аргументом нейтрального типа, который имеет форму 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.
Решите следующий нейтральный 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 в командной строке.
ddefun — Производная функцияПроизводная функция в виде указателя на функцию, синтаксисом которого является yp = ddefun(t,y,ydel,ypdel). Аргументы для ddefun описаны в приведенной ниже таблице.
| Аргумент ddefun | Описание |
|---|---|
t | Скалярное значение, представляющее текущее значение времени, t. |
y | Вектор, который представляет y (t) в уравнении 1. Размером этого вектора является n- 1, где n количество уравнений в системе, которую вы хотите решить. |
ydel | Матрица A, чьи столбцы, ydel(:,i), представляйте y (dy i). Размером этой матрицы является n- p, где n количество уравнений в системе, которую вы хотите решить, и p количество y (dy) термины в уравнении 1. |
ypdel | Матрица A, чьи столбцы, ypdel(:,j) представляйте y' (dyp j). Размером этой матрицы является n- q, где n количество уравнений в системе, которую вы хотите решить, и q количество y ' (dyp) термины в уравнении 1. |
yp | Результат возвращен ddefun. Это - n- 1 вектор, элементы которого представляют правую сторону уравнения 1. |
dely — Задержки решенияРешение задерживается в виде указателя на функцию, который возвращает dy 1..., dy p в уравнении 1. В качестве альтернативы можно передать постоянные задержки в форме вектора.
Если вы задаете dely как указатель на функцию, синтаксисом должен быть dy = dely(t,y). Аргументы для этой функции описаны в приведенной ниже таблице.
| Аргумент поставки | Описание |
|---|---|
t | Скалярное значение, представляющее текущее значение времени, t. |
y | Вектор, который представляет y (t) в уравнении 1. Размером этого вектора является n- 1, где n количество уравнений в системе, которую вы хотите решить. |
dy | Вектор возвращен dely функционируйте, чьи значения являются задержками решения, dy i, в уравнении 1. Размером этого вектора является p- 1, где p количество задержек решения уравнения. Каждый элемент должен быть меньше чем или равен t. |
Если вы хотите задать постоянные задержки решения, имеющие форму dy i = t – τ i, то dely должен быть вектор, где dely(i) = τ i. Каждое значение в этом векторе должно быть больше или быть равным нулю.
Если dy не присутствует в проблеме, установите dely к [].
Типы данных: function_handle | single | double
delyp — Производные задержкиПроизводные задержки в виде указателя на функцию, который возвращает dyp 1..., dyp q в уравнении 1. В качестве альтернативы можно передать постоянные задержки в форме вектора.
Если delyp указатель на функцию, его синтаксисом должен быть dyp = delyp(t,y). Аргументы для этой функции описаны в приведенной ниже таблице.
| Аргумент delyp | Описание |
|---|---|
t | Скалярное значение, представляющее текущее значение времени, t. |
y | Вектор, который представляет y (t) в уравнении 1. Размером этого вектора является n- 1, где n количество уравнений в системе, которую вы хотите решить. |
dyp | Вектор возвращен delyp функционируйте, чьи значения являются производными задержками, dyp j, в уравнении 1. Размером этого вектора должен быть q- 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
history — История решенияsol, от предыдущего интегрирования) | 1- 2 cellArrayИстория решения в виде указателя на функцию, вектор-столбца, sol структура (от предыдущего интегрирования), или массив ячеек. Это - решение в t ≤ t 0.
Если история меняется в зависимости от времени, задайте историю решения как указатель на функцию, синтаксисом которого является y = history(t). Эта функция возвращает n- 1 вектор, который аппроксимирует решение, y (t), для t <= t 0. Длина этого вектора, n, количество уравнений в системе, которую вы хотите решить.
Если y (t) является постоянным, можно задать history как n- 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
tspan — Интервал интегрирования- 2 векторИнтервал интегрирования в виде векторного [t0 tf]. Первый элемент, t0, начальное значение t. Второй элемент, tf, окончательное значение t. Значение t0 должно быть меньше than tf.
Типы данных: single | double
options — Дополнительные параметры интегрированияddesetsol РешениеРешение, возвращенное как структура, содержащая следующие поля.
sol.x | Mesh, выбранная 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) |
Когда вы решаете начальное значение нейтральный 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.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.