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

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

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

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

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

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

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

| | |

Похожие темы