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

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

Уравнение

y(t)=1+y(t)-2y(t2)2-y(t-π).

Функция истории являетсяy(t)=cos(t) для t0.

Поскольку уравнение имеет временные задержки в y термин, уравнение называется нейтральным DDE. Если задержки присутствуют только в y тогда уравнение будет постоянным или зависящим от состояния DDE, в зависимости от формы, которую имеют задержки по времени.

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

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

Во-первых, запишите функции, чтобы задать задержки в уравнении. Первый член уравнения с задержкой y(t2).

function dy = dely(t,y) 
    dy = t/2;
end

Другой член уравнения с задержкой является y(t-π).

function dyp = delyp(t,y) 
    dyp = t-pi;
end

В этом примере только одна задержка для y и одну задержку для y присутствуют. Если задержек было больше, то можно добавить их в эти же файлы функции, чтобы функции возвращали векторы вместо скаляров.

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

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

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

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

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

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

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

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

  • ydel   y(t2)

  • ypdely(t-π)

function yp = ddefun(t,y,ydel,ypdel) 
    yp = 1 + y - 2*ydel^2 - ypdel;
end

История решения кода

Затем создайте функцию для определения истории решений. История решений является решением для времени tt0.

function y = history(t)
    y = cos(t);
end

Решение уравнения

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

tspan = [0 pi];
sol = ddensd(@ddefun, @dely, @delyp, @history, [0,pi]);

Решение для построения графика

Структура решения sol имеет поля sol.x и sol.y которые содержат внутренние временные шаги, предпринятые решателем, и соответствующие решения в эти моменты времени. Однако можно использовать deval для оценки решения в конкретных точках.

Оцените решение в 20 одинаково разнесенных точках между 0 и pi.

tn = linspace(0,pi,20);
yn = deval(sol,tn);

Постройте график вычисленного решения и истории относительно аналитического решения.

th = linspace(-pi,0);
yh = history(th);
ta = linspace(0,pi);
ya = cos(ta);

plot(th,yh,tn,yn,'o',ta,ya)
legend('History','Numerical','Analytical','Location','NorthWest')
xlabel('Time t')
ylabel('Solution y')
title('Example of Paul with 1 Equation and 2 Delay Functions')
axis([-3.5 3.5 -1.5 1.5])

Figure contains an axes. The axes with title Example of Paul with 1 Equation and 2 Delay Functions contains 3 objects of type line. These objects represent History, Numerical, Analytical.

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

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

function yp = ddefun(t,y,ydel,ypdel) % equation being solved
    yp = 1 + y - 2*ydel^2 - ypdel;
end
%-------------------------------------------
function dy = dely(t,y) % delay for y
    dy = t/2;
end
%-------------------------------------------
function dyp = delyp(t,y) % delay for y'
    dyp = t-pi;
end
%-------------------------------------------
function y = history(t) % history function for t < 0
    y = cos(t);
end
%-------------------------------------------

Ссылки

[1] Пол, К.А.Х. Тестовый набор функциональных дифференциальных уравнений. Отчеты численного анализа. № 243. Manchester, UK: Math Department, University of Manchester, 1994.

См. также

| | |

Похожие темы