exponenta event banner

Начальное значение DDE нейтрального типа

В этом примере показано, как использовать ddensd для решения системы исходных значений DDE (дифференциальных уравнений задержки) с зависящими от времени задержками. Пример был первоначально представлен Джекевичем [1].

Уравнение:

y (t) = 2 cos (2t) y (t2) 2 cos (t) + log (y ′ (t2)) -log (2 cos (t)) -sin (t).

Это уравнение является начальным значением DDE, поскольку временные задержки равны нулю в t0. Поэтому для вычисления решения не требуется история решения, необходимы только начальные значения:

y (0) = 1,

y (0) = s.

s является решением 2 + log (s) -log (2) = 0. Значения s, удовлетворяющие этому уравнению: s1 = 2 и s2 = 0.4063757399599599.

Поскольку временные задержки в уравнениях присутствуют в y ′ члене, это уравнение называется нейтральным DDE .

Чтобы решить это уравнение в MATLAB, необходимо кодировать уравнение и задержки перед вызовом решения дифференциального уравнения задержки ddensd, который является решателем для нейтральных уравнений. Требуемые функции можно либо включить в качестве локальных функций в конце файла (как здесь сделано), либо сохранить их как отдельные файлы в каталоге по пути MATLAB.

Задержки кода

Сначала запишите анонимную функцию, чтобы определить задержки в уравнении. Поскольку и у, и у ′ имеют задержки вида t2, требуется только одно определение функции. Эта функция задержки позже передается решателю дважды, один раз, чтобы указать задержку для y и один раз для y ′.

delay = @(t,y) t/2; 

Кодовое уравнение

Теперь создайте функцию для кодирования уравнения. Эта функция должна иметь подпись yp = ddefun(t,y,ydel,ypdel), где:

  • t - время (независимая переменная).

  • y - решение (зависимая переменная).

  • ydel содержит задержки для y.

  • ypdel содержит задержки для y′=dydt.

Эти входные данные автоматически передаются функции решателем, но имена переменных определяют способ кодирования уравнения. В этом случае:

  • ydel→y (t2)

  • ypdel→y (t2 )

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

Примечание.В конце примера все функции включаются как локальные.

Уравнение решения

Наконец, определите интервал интегрирования [t0 tf] и исходные значения, а затем решите DDE с помощью ddensd решатель. Передайте начальные значения решателю, указав их в массиве ячеек в четвертом входном аргументе.

tspan = [0 0.1];
y0 = 1;
s1 = 2;
sol1 = ddensd(@ddefun, delay, delay, {y0,s1}, tspan);

Решите уравнение второй раз, на этот раз используя альтернативное значение s для начального условия.

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');

Figure contains an axes. The axes with title Two Solutions of Jackiewicz's Initial-Value NDDE contains 2 objects of type line. These objects represent y'(0) = 2, y'(0) = .40637...

Локальные функции

Здесь перечислены локальные вспомогательные функции, которые решатель 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.

См. также

| | |

Связанные темы