DDE с задержками состояния зависимыми

В этом примере показано, как использовать ddesd решить систему DDEs (дифференциальные уравнения с запаздывающим аргументом) с задержками состояния зависимыми. Эта система DDEs использовалась в качестве тестовой задачи Энрайтом и Хаяши [1].

Система уравнений

y1(t)=y2(t),

y2(t)=-y2(e1-y2(t))y2(t)2e1-y2(t).

История функционирует для t0.1 аналитические решения

y1(t)=журнал(t),

y2(t)=1t.

Задержки уравнений только присутствуют в y условия. Задержки зависят только от состояния второго компонента y2(t), таким образом, уравнения формируют систему уравнений задержки состояния зависимых.

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

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

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

function d = dely(t,y)
d = exp(1 - y(2));
end

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

Уравнение кода

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

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

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

  • Z(n,j) аппроксимирует задержки yn(d(j)), где задержка d(j) дан j компонента из dely(t,y).

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

  • Z(2,1)y2(e1-y2(t))

function dydt = ddefun(t,y,Z)
dydt = [y(2);
       -Z(2,1)*y(2)^2*exp(1 - y(2))];
end

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

Затем создайте функцию, чтобы задать историю решения. История решения является решением в течение многих времен tt0.

function v = history(t) % history function for t < t0
v = [log(t); 
     1./t];
end

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

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

tspan = [0.1 5];
sol = ddesd(@ddefun, @dely, @history, tspan);

Постройте решение

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

Постройте эти два компонента решения против времени с помощью функции истории, чтобы вычислить аналитическое решение в интервале интегрирования для сравнения.

ta = linspace(0.1,5);
ya = history(ta);

plot(ta,ya,sol.x,sol.y,'o')
legend('y_1 exact','y_2 exact','y_1 ddesd','y_2 ddesd')
xlabel('Time t')
ylabel('Solution y')
title('D1 Problem of Enright and Hayashi')

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

Перечисленный здесь локальные функции помощника что решатель DDE ddesd вызовы, чтобы вычислить решение. В качестве альтернативы можно сохранить эти функции как их собственные файлы в директории на пути MATLAB.

function dydt = ddefun(t,y,Z) % equation being solved
dydt = [y(2); 
       -Z(2,1).*y(2)^2.*exp(1 - y(2))];
end
%-------------------------------------------
function d = dely(t,y) % delay for y
d = exp(1 - y(2));
end
%-------------------------------------------
function v = history(t) % history function for t < t0
v = [log(t); 
     1./t];
end
%-------------------------------------------

Ссылки

[1] Энрайт, В.Х. и Х. Хаяши. “Оценка Numerical Software для Дифференциальных уравнений с запаздывающим аргументом”. В Продолжениях IFIP TC2/WG2.5 рабочая конференция по Качеству числового программного обеспечения: оценка и улучшение. (Р.Ф. Бойсверт, редактор). Лондон, Великобритания: Chapman & Hall, Ltd., стр 179-193.

Смотрите также

| | |

Похожие темы