В этом примере показано, как использовать ddesd
решить систему DDEs (дифференциальные уравнения с запаздывающим аргументом) с задержками состояния зависимыми. Эта система DDEs использовалась в качестве тестовой задачи Энрайтом и Хаяши [1].
Система уравнений
История функционирует для аналитические решения
Задержки уравнений только присутствуют в термины. Задержки зависят только от состояния второго компонента , таким образом, уравнения формируют систему уравнений задержки состояния зависимых.
Чтобы решить эту систему уравнений в MATLAB, необходимо закодировать уравнения, задержки и историю прежде, чем вызвать решатель дифференциального уравнения с запаздывающим аргументом ddesd
, который предназначается для систем с задержками состояния зависимыми. Вы любой может включать необходимые функции как локальные функции в конце файла (как сделано здесь) или сохранить их как отдельные, именованные файлы в директории на пути MATLAB.
Во-первых, запишите функцию, чтобы задать задержки системы. Единственная задержка, существующая в этой системе уравнений, находится в термине.
function d = dely(t,y) d = exp(1 - y(2)); end
Примечание: Все функции включены как локальные функции в конце примера.
Теперь создайте функцию, чтобы закодировать уравнения. Эта функция должна иметь подпись dydt = ddefun(t,y,Z)
, где:
t
время (независимая переменная).
y
решение (зависимая переменная).
Z(n,j)
аппроксимирует задержки , где задержка дан j
компонента из
dely(t,y)
.
Эти входные параметры автоматически передаются функции решателем, но имена переменных определяют, как вы кодируете уравнения. В этом случае:
Z(2,1)
function dydt = ddefun(t,y,Z) dydt = [y(2); -Z(2,1)*y(2)^2*exp(1 - y(2))]; end
Затем создайте функцию, чтобы задать историю решения. История решения является решением в течение многих времен .
function v = history(t) % history function for t < t0 v = [log(t); 1./t]; end
Наконец, задайте интервал интегрирования и решите DDE с помощью ddesd
решатель.
tspan = [0.1 5]; sol = ddesd(@ddefun, @dely, @history, tspan);
Структура решения sol
имеет поля sol.x
и sol.y
это содержит внутренние временные шаги, взятые решателем и соответствующими решениями в те времена. (Если вам нужно решение в отдельных моментах, можно использовать deval
оценивать решение в отдельных моментах.)
Постройте эти два компонента решения против времени с помощью функции истории, чтобы вычислить аналитическое решение в интервале интегрирования для сравнения.
ta = linspace(0.1,5); ya = history(ta); plot(ta,ya,sol.x,sol.y,'o') legend('y_1 exact','y_2 exact','y_1 ddesd','y_2 ddesd') xlabel('Time t') ylabel('Solution y') title('D1 Problem of Enright and Hayashi')
Перечисленный здесь локальные функции помощника что решатель DDE ddesd
вызовы, чтобы вычислить решение. В качестве альтернативы можно сохранить эти функции как их собственные файлы в директории на пути MATLAB.
function dydt = ddefun(t,y,Z) % equation being solved dydt = [y(2); -Z(2,1).*y(2)^2.*exp(1 - y(2))]; end %------------------------------------------- function d = dely(t,y) % delay for y d = exp(1 - y(2)); end %------------------------------------------- function v = history(t) % history function for t < t0 v = [log(t); 1./t]; end %-------------------------------------------
[1] Энрайт, В.Х. и Х. Хаяши. “Оценка Numerical Software для Дифференциальных уравнений с запаздывающим аргументом”. В Продолжениях IFIP TC2/WG2.5 рабочая конференция по Качеству числового программного обеспечения: оценка и улучшение. (Р.Ф. Бойсверт, редактор). Лондон, Великобритания: Chapman & Hall, Ltd., стр 179-193.
ddensd
| ddesd
| dde23
| deval