В этом примере показано, как использовать ddensd для решения системы исходных значений DDE (дифференциальных уравнений задержки) с зависящими от времени задержками. Пример был первоначально представлен Джекевичем [1].
Уравнение:
cos (t)) -sin (t).
Это уравнение является начальным значением DDE, поскольку временные задержки равны нулю в . Поэтому для вычисления решения не требуется история решения, необходимы только начальные значения:
1,
= s.
является решением (2) = 0. Значения s, удовлетворяющие этому s1 0.4063757399599599.
Поскольку временные задержки в уравнениях присутствуют в ′ члене, это уравнение называется нейтральным DDE .
Чтобы решить это уравнение в MATLAB, необходимо кодировать уравнение и задержки перед вызовом решения дифференциального уравнения задержки ddensd, который является решателем для нейтральных уравнений. Требуемые функции можно либо включить в качестве локальных функций в конце файла (как здесь сделано), либо сохранить их как отдельные файлы в каталоге по пути MATLAB.
Сначала запишите анонимную функцию, чтобы определить задержки в уравнении. Поскольку и , и ′ имеют задержки вида t2, требуется только одно определение функции. Эта функция задержки позже передается решателю дважды, один раз, чтобы указать задержку для y и один раз для ′.
delay = @(t,y) t/2;
Теперь создайте функцию для кодирования уравнения. Эта функция должна иметь подпись yp = ddefun(t,y,ydel,ypdel), где:
t - время (независимая переменная).
y - решение (зависимая переменная).
ydel содержит задержки для y.
ypdel содержит задержки для .
Эти входные данные автоматически передаются функции решателем, но имена переменных определяют способ кодирования уравнения. В этом случае:
ydel)
ypdelt2 )
function yp = ddefun(t,y,ydel,ypdel) yp = 2*cos(2*t)*ydel^(2*cos(t)) + log(ypdel) - log(2*cos(t)) - sin(t); end
Примечание.В конце примера все функции включаются как локальные.
Наконец, определите интервал интегрирования и исходные значения, а затем решите DDE с помощью ddensd решатель. Передайте начальные значения решателю, указав их в массиве ячеек в четвертом входном аргументе.
tspan = [0 0.1];
y0 = 1;
s1 = 2;
sol1 = ddensd(@ddefun, delay, delay, {y0,s1}, tspan);Решите уравнение второй раз, на этот раз используя альтернативное значение для начального условия.
s2 = 0.4063757399599599;
sol2 = ddensd(@ddefun, delay, delay, {y0,s2}, tspan);Структуры решения sol1 и sol2 иметь поля x и y которые содержат внутренние временные шаги, предпринятые решателем, и соответствующие решения в это время. Тем не менее, вы можете использовать deval для оценки решения в определенных точках.
Постройте график двух решений для сравнения результатов.
plot(sol1.x,sol1.y,sol2.x,sol2.y); legend('y''(0) = 2','y''(0) = .40637..','Location','NorthWest'); xlabel('Time t'); ylabel('Solution y'); title('Two Solutions of Jackiewicz''s Initial-Value NDDE');

Здесь перечислены локальные вспомогательные функции, которые решатель DDE ddensd вызывает для вычисления решения. Кроме того, эти функции можно сохранить в виде собственных файлов в каталоге по пути MATLAB.
function yp = ddefun(t,y,ydel,ypdel) yp = 2*cos(2*t)*ydel^(2*cos(t)) + log(ypdel) - log(2*cos(t)) - sin(t); end
[1] Джекевич, З. «Одностадийные методы любого порядка для нейтральных функциональных дифференциальных уравнений». Журнал SIAM по численному анализу. Том 21, номер 3. 1984. стр 486–511.
dde23 | ddensd | ddesd | deval