DDE начального значения нейтрального типа

В этом примере показано, как использовать ddensd решить систему начального значения DDEs (дифференциальные уравнения с запаздывающим аргументом) с зависящими от времени задержками. Пример был первоначально представлен Jackiewicz [1].

Уравнение

y(t)=2cos(2t)y(t2)2cos(t)+log(y(t2))-log(2cos(t))-sin(t).

Это уравнение является DDE начального значения, потому что задержки являются нулем в t0. Поэтому история решения является ненужной, чтобы вычислить решение, только начальные значения необходимы:

y(0)=1,

y(0)=s.

s решение 2+log(s)-log(2)=0. Значения s это удовлетворяет этому уравнению, s1=2 и s2=0.4063757399599599.

Поскольку задержки уравнений присутствуют в a y назовите, это уравнение называется нейтральным DDE.

Чтобы решить это уравнение в MATLAB, необходимо закодировать уравнение и задержки прежде, чем вызвать решатель дифференциального уравнения с запаздывающим аргументом ddensd, который является решателем для нейтральных уравнений. Вы любой может включать необходимые функции как локальные функции в конце файла (как сделано здесь) или сохранить их как отдельные файлы в директории на пути MATLAB.

Задержки кода

Во-первых, запишите анонимную функцию, чтобы задать задержки уравнения. Начиная с обоих y и y имейте задержки формы t2, только одно функциональное определение требуется. Эта функция задержки позже передается решателю дважды, однажды чтобы указать на задержку y и однажды для y.

delay = @(t,y) t/2; 

Уравнение кода

Теперь создайте функцию, чтобы закодировать уравнение. Эта функция должна иметь подпись yp = ddefun(t,y,ydel,ypdel), где:

  • t время (независимая переменная).

  • y решение (зависимая переменная).

  • ydel содержит задержки y.

  • ypdel содержит задержки y=dydt.

Эти входные параметры автоматически передаются функции решателем, но имена переменных определяют, как вы кодируете уравнение. В этом случае:

  • ydely(t2)

  • ypdely(t2)

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

Примечание: Все функции включены как локальные функции в конце примера.

Решите уравнение

Наконец, задайте интервал интегрирования [t0  tf] и начальные значения, и затем решают DDE с помощью ddensd решатель. Передайте начальные значения решателю путем определения их в массиве ячеек в четвертом входном параметре.

tspan = [0 0.1];
y0 = 1;
s1 = 2;
sol1 = ddensd(@ddefun, delay, delay, {y0,s1}, tspan);

Решите уравнение во второй раз, на этот раз с помощью альтернативного значения s для начального условия.

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.

Смотрите также

| | |

Похожие темы