exponenta event banner

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

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

Уравнение:

y (t) = 1 + y (t) -2y (t2) 2-y ′ (t-δ).

Функция истории isy (t) = cos (t) для t≤0.

Поскольку уравнение имеет временные задержки в 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.

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

  • ydely (t2)

  • ypdely (t-δ )

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

Журнал кодовых решений

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

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. Манчестер, Великобритания: факультет математики, Манчестерский университет, 1994 год.

См. также

| | |

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