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

Localfunctions

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

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

| | |

Похожие темы