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

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

Уравнение

y(t)=2cos(2t)y(t2)2cos(t)+log(y(t2))-log(2cos(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.

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

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

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

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

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

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

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

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

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

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

  • ydely(t2)

  • ypdely(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] Jackiewicz, Z. «One step Methods of any Order for Neutral Functional Дифференциальные Уравнения». SIAM Journal по численному анализу. Том 21, номер 3. 1984. стр 486–511.

См. также

| | |

Похожие темы