Этот пример показывает, как использовать 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.
dde23
| ddensd
| ddesd
| deval