В этом примере показано, как использовать dde23
для решения системы DDE (дифференциальных уравнений с задержкой) с постоянными задержками.
Система уравнений
Функция истории для является постоянным, .
Задержки в уравнениях присутствуют только в членов, а сами задержки являются постоянными, поэтому уравнения образуют систему уравнений с постоянной задержкой.
Чтобы решить эту систему уравнений в MATLAB, необходимо кодировать уравнения, задержки и историю перед вызовом решателя для дифференциальных уравнений с задержкой dde23
, который предназначен для систем с постоянными задержками. Можно либо включить необходимые функции в качестве локальных функций в конце файла (как это сделано здесь), либо сохранить их как отдельные, именованные файлы в директории по пути MATLAB.
Во-первых, создайте вектор, чтобы задать задержки в системе уравнений. Эта система имеет две различные задержки:
Задержка 1 в первом компоненте .
Задержка 0,2 во втором компоненте .
dde23
принимает аргумент вектора для задержек, где каждый элемент является постоянной задержкой для одного компонента.
lags = [1 0.2];
Теперь создайте функцию, чтобы кодировать уравнения. Эта функция должна иметь подпись dydt = ddefun(t,y,Z)
, где:
t
является временем (независимая переменная).
y
- решение (зависимая переменная).
Z(:,j)
аппроксимирует задержку , где постоянная задержка задается lags(j)
.
Эти входы автоматически передаются функции решателем, но имена переменных определяют, как вы кодируете уравнения. В этом случае:
Z(:,1)
Z(:,2)
function dydt = ddefun(t,y,Z) ylag1 = Z(:,1); ylag2 = Z(:,2); dydt = [ylag1(1); ylag1(1)+ylag2(2); y(2)]; end
Примечание.Все функции включены в качестве локальных функций в конце примера.
Затем создайте функцию для определения истории решений. История решений является решением для времени .
function s = history(t) s = ones(3,1); end
Наконец, задайте интервал интегрирования и решить 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 %-------------------------------------------
dde23
| ddensd
| ddesd
| deval