В этом примере показано, как использовать dde23
решить систему DDEs (дифференциальные уравнения с запаздывающим аргументом) с постоянными задержками.
Система уравнений
Функция истории для является постоянным, .
Задержки уравнений только присутствуют в условия и сами задержки являются константами, таким образом, уравнения формируют систему постоянных уравнений задержки.
Чтобы решить эту систему уравнений в 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 = ddex1de(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