Этот пример показывает, как использовать ddensd
, чтобы решить систему начального значения DDEs (дифференциальные уравнения с запаздывающим аргументом) с зависящими от времени задержками. Пример был первоначально представлен Jackiewicz [1].
Уравнение
Это уравнение является DDE начального значения, потому что задержки являются нулем в . Поэтому история решения является ненужной, чтобы вычислить решение, только начальные значения необходимы:
решение . Значения это удовлетворяет этому уравнению, и .
Поскольку задержки уравнений присутствуют в a назовите, это уравнение называется нейтральным 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. “Методы шага любого Порядка для Нейтральных Функциональных Дифференциальных уравнений”. SIAM Journal согласно Числовому Анализу. Издание 21, Номер 3. 1984. стр 486–511.
dde23
| ddensd
| ddesd
| deval