Решите дифференциальные уравнения с запаздывающим аргументом (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 (dy1)..., y (dyp), y' (dyp1)..., y' (dypq)) | (1) |
t является временем представления независимой переменной.
dyi является любой из p задержек решения.
dypj является любой из 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
в командной строке.
ddefun
Производная функцияПроизводная функция, заданная как указатель на функцию, синтаксисом которого является yp = ddefun(t,y,ydel,ypdel)
. Аргументы для ddefun
описаны в приведенной ниже таблице.
Аргумент ddefun | Описание |
---|---|
t | Скалярное значение, представляющее текущую стоимость времени, t. |
y | Вектор, который представляет y (t) в Уравнении 1. Размером этого вектора является n -by-1 , где n является количеством уравнений в системе, вы хотите решить. |
ydel | Матрица, столбцы которой, ydel(:,i) , представляют y (dyi). Размером этой матрицы является n -by-p , где n является количеством уравнений в системе, вы хотите решить, и p является количеством y (dy) условия в Уравнении 1. |
ypdel | Матрица, чьи столбцы, ypdel(:,j) представляет y' (dypj). Размером этой матрицы является n -by-q , где n является количеством уравнений в системе, вы хотите решить, и q является количеством y' (dyp) условия в Уравнении 1. |
yp | Результат возвращен ddefun . Это - n -by-1 вектор, элементы которого представляют правую сторону Уравнения 1. |
dely
— Задержки решенияЗадержки решения, заданные как указатель на функцию, который возвращает dy1..., dyp в Уравнении 1. Также можно передать постоянные задержки в форме вектора.
Если вы задаете dely
как указатель на функцию, синтаксисом должен быть dy = dely(t,y)
. Аргументы для этой функции описаны в приведенной ниже таблице.
Аргумент поставки | Описание |
---|---|
t | Скалярное значение, представляющее текущую стоимость времени, t. |
y | Вектор, который представляет y (t) в Уравнении 1. Размером этого вектора является n -by-1 , где n является количеством уравнений в системе, вы хотите решить. |
dy | Вектор, возвращенный dely , функционирует, чьи значения являются задержками решения, dyi, в Уравнении 1. Размером этого вектора является p -by-1 , где p является количеством задержек решения уравнения. Каждый элемент должен быть меньше чем или равен t. |
Если вы хотите задать постоянные задержки решения, имеющие форму dyi = t – τi, то dely
должен быть вектором, где dely(i)
= τi. Каждое значение в этом векторе должно быть больше, чем или равным нулю.
Если dy не присутствует в проблеме, установите dely
на []
.
Типы данных: function_handle
| единственный
| дважды
delyp
Производные задержкиПроизводные задержки, заданные как указатель на функцию, который возвращает dyp1..., dypq в Уравнении 1. Также можно передать постоянные задержки в форме вектора.
Если delyp
является указателем на функцию, его синтаксисом должен быть dyp = delyp(t,y)
. Аргументы для этой функции описаны в приведенной ниже таблице.
Аргумент delyp | Описание |
---|---|
t | Скалярное значение, представляющее текущую стоимость времени, t. |
y | Вектор, который представляет y (t) в Уравнении 1. Размером этого вектора является n -by-1 , где n является количеством уравнений в системе, вы хотите решить. |
dyp | Вектор, возвращенный delyp , функционирует, чьи значения являются производными задержками, dypj, в Уравнении 1. Размером этого вектора должен быть q -by-1 , где q является количеством задержек решения, dypj, в уравнении. Каждый элемент dyp должен быть меньше, чем t. Существует одно исключение к этому ограничению: если вы решаете DDE начального значения, значение dyp может равняться t в t = t0. Для получения дополнительной информации смотрите Начальное значение Нейтральные Дифференциальные уравнения с запаздывающим аргументом. |
Если вы хотите, задают постоянные производные задержки, имеющие форму dypj = t – τj, то delyp
должен быть вектором, где delyp(j)
= τj. Каждое значение в этом векторе должно быть больше, чем нуль. Исключение к этому ограничению происходит, когда вы решаете задачи с начальными значениями для DDEs нейтрального типа. В таких случаях значение в delyp
может равняться нулю в t = t0. Смотрите Начальное значение Нейтральные Дифференциальные уравнения с запаздывающим аргументом для получения дополнительной информации.
Если dyp не присутствует в проблеме, установите delyp
на []
.
Типы данных: function_handle
| единственный
| дважды
history
— История решенияsol
, от предыдущего интегрирования) | 1
-by-2
массив ячеекИстория решения, заданная как указатель на функцию, вектор - столбец, структура sol
(от предыдущего интегрирования), или массив ячеек. Это - решение в t ≤ t0.
Если история меняется в зависимости от времени, задайте историю решения как указатель на функцию, синтаксисом которого является y = history(t)
. Эта функция возвращает n
-by-1
вектор, который аппроксимирует решение, y (t), для t <= t0. Длина этого вектора, n
, является количеством уравнений в системе, которую вы хотите решить.
Если y (t) является постоянным, можно задать history
как n
-by-1
вектор постоянных значений.
Если вы вызываете ddensd
, чтобы продолжить предыдущее интегрирование с t0, можно задать историю как вывод, sol
, от предыдущего интегрирования.
Если вы решаете DDE начального значения, задаете историю как массив ячеек, {y0, yp0}
. Первый элемент, y0
, является вектором - столбцом начальных значений, y (t0). Второй элемент, yp0, является вектором - столбцом, элементы которого являются начальными производными, y' (t0). Эти векторы должны быть сопоставимыми, означая, что они удовлетворяют Уравнению 1 в t0. Смотрите Начальное значение Нейтральные Дифференциальные уравнения с запаздывающим аргументом для получения дополнительной информации.
Типы данных: function_handle
| единственный
| удваиваются
| struct
| ячейка
tspan
Интервал интегрирования1
-by-2
векторИнтервал интегрирования, заданного как векторный [t0 tf]
. Первый элемент, t0
, является начальным значением t. Второй элемент, tf
, является окончательным значением t. Значение t0
должно быть меньшим количеством than tf
.
Типы данных: single | double
опции
Дополнительные параметры интегрирования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 начального значения имеет 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) |
Когда вы решаете начальное значение нейтральный DDEs, необходимо предоставить y' (t0) к ddensd
. Для этого задайте history
как массив ячеек {Y0,YP0}
. Здесь, Y0
является вектором - столбцом начальных значений, y (t0), и YP0
является вектором - столбцом начальных производных, y' (t0). Эти векторы должны быть сопоставимыми, означая, что они удовлетворяют Уравнению 2 в t0.
Для получения информации об алгоритме, используемом в этом решателе, смотрите Шемпина [2].
[1] Пол, C.A.H. “Набор тестов функциональных дифференциальных уравнений”. Числовые аналитические отчеты. № 243. Манчестер, Великобритания: математический отдел, Манчестерский университет, 1994.
[2] Шемпин, L.F. “Диссипативные Приближения к Нейтральному DDEs”. Applied Mathematics & Computation. Издание 203, Номер 2, 2008, стр 641–648.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.