Решите дифференциальные уравнения (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 производных задержек.
Решите следующий нейтральный 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
описаны в таблице ниже.
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. |
dely
- Задержки решенияЗадержки решения, заданные как указатель на функцию, который возвращает 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
delyp
- Производные задержкиПроизводные задержки, заданные как указатель на функцию, который возвращает 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
history
- История решенийsol
, от предыдущего интегрирования) | 1
-by- 2
массив ячеекИстория решения, заданная как указатель на функцию, вектор-столбец, sol
структура (от предыдущего интегрирования) или массив ячеек. Это решение при t ≤ t 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
tspan
- Интервал интегрирования1
-by- 2
векторИнтервал интегрирования, заданный как вектор [t0 tf]
. Первый элемент, t0
, - начальное значение t. Второй элемент, tf
, - окончательное значение t. Значение t0
должно быть меньше tf
.
Типы данных: single
| double
options
- Опциональные параметры интегрированияddeset
sol
- РешениеРешение, возвращенное как структура, содержащая следующие поля.
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 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) |
Когда вы решаете нейтральные 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.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.