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

В этом примере показано, как использовать dde23 для решения системы DDE (дифференциальных уравнений с задержкой) с постоянными задержками.

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

y1(t)=y1(t-1)y2(t)=y1(t-1)+y2(t-0.2)y3(t)=y2(t).

Функция истории для t0 является постоянным, y1(t)=y2(t)=y3(t)=1.

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

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

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

Во-первых, создайте вектор, чтобы задать задержки в системе уравнений. Эта система имеет две различные задержки:

  • Задержка 1 в первом компоненте y1(t-1).

  • Задержка 0,2 во втором компоненте y2(t-0.2).

dde23 принимает аргумент вектора для задержек, где каждый элемент является постоянной задержкой для одного компонента.

lags = [1 0.2];

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

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

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

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

  • Z(:,j) аппроксимирует задержку y(t-τj), где постоянная задержка τj задается lags(j).

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

  • Z(:,1)y1(t-1)

  • Z(:,2)y2(t-0.2)

function dydt = ddefun(t,y,Z)
  ylag1 = Z(:,1);
  ylag2 = Z(:,2);

  dydt = [ylag1(1); 
          ylag1(1)+ylag2(2); 
          y(2)];
end

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

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

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

function s = history(t)
  s = ones(3,1);
end

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

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

tspan = [0 5];
sol = dde23(@ddefun, lags, @history, tspan);

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

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

Постройте график для трех компонентов решения в зависимости от времени.

plot(sol.x,sol.y,'-o')
xlabel('Time t');
ylabel('Solution y');
legend('y_1','y_2','y_3','Location','NorthWest');

Figure contains an axes. The axes contains 3 objects of type line. These objects represent y_1, y_2, y_3.

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

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

function dydt = ddefun(t,y,Z) % equation being solved
  ylag1 = Z(:,1);
  ylag2 = Z(:,2);

  dydt = [ylag1(1); 
          ylag1(1)+ylag2(2); 
          y(2)];
end
%-------------------------------------------
function s = history(t) % history function for t <= 0
  s = ones(3,1);
end
%-------------------------------------------

См. также

| | |

Похожие темы