В этом примере показано, как использовать ddensd
для решения системы ДДЭ начальных значений (дифференциальные уравнения задержки) с зависящими от времени задержками. Пример был первоначально представлен Jackiewicz [1].
Уравнение
Это уравнение является начальным значением DDE, потому что временные задержки равны нулю в . Поэтому история решений не нужна для вычисления решения, необходимы только начальные значения:
является решением . Значения которые удовлетворяют этому уравнению, и .
Поскольку задержки в уравнениях присутствуют в термин, это уравнение называется нейтральным DDE.
Чтобы решить это уравнение в MATLAB, необходимо кодировать уравнение и задержки перед вызовом решателя для дифференциальных уравнений с задержкой ddensd
, который является решателем для нейтральных уравнений. Можно либо включить необходимые функции в качестве локальных функций в конец файла (как это сделано здесь), либо сохранить их как отдельные файлы в директории по пути MATLAB.
Сначала напишите анонимную функцию, чтобы задать задержки в уравнении. Поскольку оба и иметь задержки формы требуется только одно определение функции. Эта функция задержки позже передается решателю дважды, один раз, чтобы указать задержку для и один раз для .
delay = @(t,y) t/2;
Теперь создайте функцию, чтобы кодировать уравнение. Эта функция должна иметь подпись yp = ddefun(t,y,ydel,ypdel)
, где:
t
является временем (независимая переменная).
y
- решение (зависимая переменная).
ydel
содержит задержки для y.
ypdel
содержит задержки для .
Эти входы автоматически передаются функции решателем, но имена переменных определяют, как вы кодируете уравнение. В этом случае:
ydel
ypdel
function yp = ddefun(t,y,ydel,ypdel) yp = 2*cos(2*t)*ydel^(2*cos(t)) + log(ypdel) - log(2*cos(t)) - sin(t); end
Примечание.Все функции включены в качестве локальных функций в конце примера.
Наконец, задайте интервал интегрирования и начальные значения, а затем решить DDE с помощью ddensd
решатель. Передайте начальные значения решателю путем определения их в массиве ячеек в четвертом входном параметре.
tspan = [0 0.1]; y0 = 1; s1 = 2; sol1 = ddensd(@ddefun, delay, delay, {y0,s1}, tspan);
Решите уравнение во второй раз, на этот раз используя альтернативное значение для начального условия.
s2 = 0.4063757399599599; sol2 = ddensd(@ddefun, delay, delay, {y0,s2}, tspan);
Структуры решения sol1
и sol2
иметь поля x
и y
которые содержат внутренние временные шаги, предпринятые решателем, и соответствующие решения в эти моменты времени. Однако можно использовать deval
для оценки решения в конкретных точках.
Постройте график двух решений для сравнения результатов.
plot(sol1.x,sol1.y,sol2.x,sol2.y); legend('y''(0) = 2','y''(0) = .40637..','Location','NorthWest'); xlabel('Time t'); ylabel('Solution y'); title('Two Solutions of Jackiewicz''s Initial-Value NDDE');
Здесь перечислены локальные вспомогательные функции, которые решатель DDE ddensd
вызывается для вычисления решения. Также можно сохранить эти функции как собственные файлы в директории по пути MATLAB.
function yp = ddefun(t,y,ydel,ypdel) yp = 2*cos(2*t)*ydel^(2*cos(t)) + log(ypdel) - log(2*cos(t)) - sin(t); end
[1] Jackiewicz, Z. «One step Methods of any Order for Neutral Functional Дифференциальные Уравнения». SIAM Journal по численному анализу. Том 21, номер 3. 1984. стр 486–511.
dde23
| ddensd
| ddesd
| deval