В этом примере показано, как использовать ddesd для решения системы DDE (дифференциальных уравнений задержки) с зависимыми от состояния задержками. Эта система DDE была использована в качестве тестовой проблемы Энрайтом и Хаяси [1].
Система уравнений
(t),
2⋅e1-y2 (t).
Функции истории для являются аналитическими решениями.
(t),
1t.
Временные задержки в уравнениях присутствуют только в терминах. Задержки зависят только от состояния второго компонента ), поэтому уравнения образуют систему зависимых от состояния уравнений задержки.
Чтобы решить эту систему уравнений в MATLAB, необходимо кодировать уравнения, задержки и историю, прежде чем вызывать решатель дифференциальных уравнений задержки ddesd, которая предназначена для систем с зависимыми от состояния задержками. Требуемые функции можно либо включить в качестве локальных функций в конце файла (как здесь сделано), либо сохранить их как отдельные именованные файлы в каталоге по пути MATLAB.
Сначала запишите функцию для определения временных задержек в системе. Единственная задержка, присутствующая в этой системе уравнений, находится в )).
function d = dely(t,y) d = exp(1 - y(2)); end
Примечание.В конце примера все функции включаются как локальные.
Теперь создайте функцию для кодирования уравнений. Эта функция должна иметь подпись dydt = ddefun(t,y,Z), где:
t - время (независимая переменная).
y - решение (зависимая переменная).
Z(n,j) аппроксимирует задержки )), где (j) задается компонентомj из dely(t,y).
Эти входные данные автоматически передаются функции решателем, но имена переменных определяют способ кодирования уравнений. В этом случае:
Z(2,1)))
function dydt = ddefun(t,y,Z) dydt = [y(2); -Z(2,1)*y(2)^2*exp(1 - y(2))]; end
Затем создайте функцию для определения истории решения. История решения - это решение для .
function v = history(t) % history function for t < t0 v = [log(t); 1./t]; end
Наконец, определите интервал интеграции и решите DDE с помощью ddesd решатель.
tspan = [0.1 5]; sol = ddesd(@ddefun, @dely, @history, tspan);
Структура решения sol имеет поля sol.x и sol.y которые содержат внутренние временные шаги, предпринятые решателем, и соответствующие решения в это время. (Если решение необходимо в определенных точках, можно использовать deval для оценки решения в конкретных точках.)
Постройте график двух компонентов решения по времени с использованием функции истории для вычисления аналитического решения в пределах интервала интегрирования для сравнения.
ta = linspace(0.1,5); ya = history(ta); plot(ta,ya,sol.x,sol.y,'o') legend('y_1 exact','y_2 exact','y_1 ddesd','y_2 ddesd') xlabel('Time t') ylabel('Solution y') title('D1 Problem of Enright and Hayashi')

Здесь перечислены локальные вспомогательные функции, которые решатель DDE ddesd вызывает для вычисления решения. Кроме того, эти функции можно сохранить в виде собственных файлов в каталоге по пути MATLAB.
function dydt = ddefun(t,y,Z) % equation being solved dydt = [y(2); -Z(2,1).*y(2)^2.*exp(1 - y(2))]; end %------------------------------------------- function d = dely(t,y) % delay for y d = exp(1 - y(2)); end %------------------------------------------- function v = history(t) % history function for t < t0 v = [log(t); 1./t]; end %-------------------------------------------
[1] Энрайт, У. Х. и Х. Хаяси. «Оценка числового программного обеспечения для дифференциальных уравнений задержки». В трудах ИФИП TC2/WG2.5 рабочая конференция по качеству числового программного обеспечения: оценка и совершенствование. (Р. Ф. Буасверт, изд.). Лондон, Великобритания: Chapman & Hall, Ltd., стр. 179-193.
dde23 | ddensd | ddesd | deval