exponenta event banner

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

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

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

y1 (t) = y1 (t-1) y2 (t) = y1 (t-1) + y2 (t-0,2) y3 ′ (t) = y2 (t).

Функция истории для t≤0 является постоянной, 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- 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

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

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

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

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

Уравнение решения

Наконец, определите интервал интеграции [t0 tf] и решите 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
%-------------------------------------------

См. также

| | |

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