Решающая система PDE

Этот пример показывает, как сформулировать, вычислить и построить график решения системы двух дифференциальных уравнений с частными производными.

Рассмотрите систему PDE

u1t=0.0242u1x2-F(u1-u2),

u2t=0.1702u2x2+F(u1-u2).

(Функция F(y)=e5.73y-e-11.46y используется в качестве стенограммы.)

Уравнение удерживается на интервале 0x1 для раз t0. Начальные условия

u1(x,0)=1,

u2(x,0)=0.

Граничные условия

xu1(0,t)=0,u2(0,t)=0,xu2(1,t)=0,u1(1,t)=1.

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

Кодовое уравнение

Прежде чем вы сможете кодировать уравнение, необходимо убедиться, что это в том виде, в котором pdepe решатель ожидает:

c(x,t,u,ux)ut=x-mx(xmf(x,t,u,ux))+s(x,t,u,ux).

В этой форме коэффициенты УЧП являются матричными, и уравнение становится

[1001]t[u1u2]=x[0.024u1x0.170u2x]+[-F(u1-u2)F(u1-u2)].

Таким образом, значения коэффициентов в уравнении

m=0

c(x,t,u,ux)=[11] (только по диагонали)

f(x,t,u,ux)=[0.024u1x0.170u2x]

s(x,t,u,ux)=[-F(u1-u2)F(u1-u2)]

Теперь можно создать функцию, чтобы кодировать уравнение. Функция должна иметь подпись [c,f,s] = pdefun(x,t,u,dudx):

  • x - независимая пространственная переменная.

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

  • u - зависимая переменная, дифференцируемая по отношению к x и t. Это двухэлементный вектор, где u(1) является u1(x,t) и u(2) является u2(x,t).

  • dudx - частная пространственная производная u/x. Это двухэлементный вектор, где dudx(1) является u1/x и dudx(2) является u2/x.

  • Выходные выходы c, f, и s соответствуют коэффициентам в стандартной форме уравнения УЧП, ожидаемым по pdepe.

В результате уравнения в этом примере могут быть представлены функцией:

function [c,f,s] = pdefun(x,t,u,dudx)
c = [1; 1];
f = [0.024; 0.17] .* dudx;
y = u(1) - u(2);
F = exp(5.73*y)-exp(-11.47*y);
s = [-F; F];
end

(Примечание. Все функции включены в качестве локальных функций в конце примера.)

Начальные условия кода

Затем напишите функцию, которая возвращает начальное условие. Начальное условие применяется в первый раз и предоставляет значение u(x,t0) для любого значения x. Количество начальных условий должно равняться количеству уравнений, поэтому для этой задачи существует два начальных условия. Используйте сигнатуру функции u0 = pdeic(x) для записи функции.

Начальные условия

u1(x,0)=1,

u2(x,0)=0.

Соответствующая функция является

function u0 = pdeic(x)
u0 = [1; 0];
end

Граничные условия кода

Теперь напишите функцию, которая оценивает граничные условия

xu1(0,t)=0,u2(0,t)=0,xu2(1,t)=0,u1(1,t)=1.

Для задач, поставленных на интервале axb, граничные условия применяются для всех t и либо x=a или x=b. Стандартная форма для граничных условий, ожидаемых решателем,

p(x,t,u)+q(x,t)f(x,t,u,ux)=0.

Записанные в этой форме граничные условия для частных производных u должны быть выражены в терминах потока f(x,t,u,ux). Таким образом, граничные условия для этой задачи

Для x=0, уравнение

[0u2]+[10][0.024u1x0.170u2x]=0.

Коэффициенты:

pL(x,t,u)=[0u2],

qL(x,t)=[10].

Аналогично, для x=1 уравнение

[u1-10]+[01][0.024u1x0.170u2x]=0.

Коэффициенты:

pR(x,t,u)=[u1-10],

qR(x,t)=[01].

Граничная функция должна использовать сигнатуру функции [pl,ql,pr,qr] = pdebc(xl,ul,xr,ur,t):

  • Входы xl и ul соответствуют u и x для левого контура.

  • Входы xr и ur соответствуют u и x для правого контура.

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

  • Выходные выходы pl и ql соответствуют pL(x,t,u) и qL(x,t) для левого контура (x=0 для этой задачи).

  • Выходные выходы pr и qr соответствуют pR(x,t,u) и qR(x,t) для правого контура (x=1 для этой задачи).

Граничные условия в этом примере представлены функцией:

function [pl,ql,pr,qr] = pdebc(xl,ul,xr,ur,t)
pl = [0; ul(2)];
ql = [1; 0];
pr = [ur(1)-1; 0];
qr = [0; 1];
end

Выберите Mesh решения

Решение этой проблемы изменяется быстро, когда t маленькая. Хотя pdepe выбирает временной шаг, подходящий для разрешения резких изменений, чтобы увидеть поведение на выходных графиках, необходимо выбрать соответствующее время выхода. Для пространственного mesh в решении есть граничные слои на обоих концах 0x1, поэтому необходимо задать точки mesh там, чтобы разрешить резкие изменения.

x = [0 0.005 0.01 0.05 0.1 0.2 0.5 0.7 0.9 0.95 0.99 0.995 1];
t = [0 0.005 0.01 0.05 0.1 0.5 1 1.5 2];

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

Наконец, решите уравнение, используя симметрию m, уравнение УЧП, начальные условия, граничные условия и сетки для x и t.

m = 0;
sol = pdepe(m,@pdefun,@pdeic,@pdebc,x,t);

pdepe возвращает решение в трехмерный массив sol, где sol(i,j,k) аппроксимирует kпервый компонент решения uk оценивается в t(i) и x(j). Извлеките каждый компонент решения в отдельную переменную.

u1 = sol(:,:,1);
u2 = sol(:,:,2);

Решение для построения графика

Создайте объемные поверхностные диаграммы решений для u1 и u2 нанесенный на график в выбранных точках mesh для x и t.

surf(x,t,u1)
title('u_1(x,t)')
xlabel('Distance x')
ylabel('Time t')

Figure contains an axes. The axes with title u_1(x,t) contains an object of type surface.

surf(x,t,u2)
title('u_2(x,t)')
xlabel('Distance x')
ylabel('Time t')

Figure contains an axes. The axes with title u_2(x,t) contains an object of type surface.

Локальные функции

Здесь перечислены локальные вспомогательные функции, которые решатель PDE pdepe вызывается для вычисления решения. Также можно сохранить эти функции как собственные файлы в директории по пути MATLAB.

function [c,f,s] = pdefun(x,t,u,dudx) % Equation to solve
c = [1; 1];
f = [0.024; 0.17] .* dudx;
y = u(1) - u(2);
F = exp(5.73*y)-exp(-11.47*y);
s = [-F; F];
end
% ---------------------------------------------
function u0 = pdeic(x) % Initial Conditions
u0 = [1; 0];
end
% ---------------------------------------------
function [pl,ql,pr,qr] = pdebc(xl,ul,xr,ur,t) % Boundary Conditions
pl = [0; ul(2)];
ql = [1; 0];
pr = [ur(1)-1; 0];
qr = [0; 1];
end
% ---------------------------------------------

См. также

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте