В этом примере показано, как сформулировать, вычислить и построить решение для системы двух дифференциальных уравнений в частных производных.
Рассмотрим систему ПДЭ
),
).
(Функция e5.73y-e-11.46y используется в качестве краткого описания.)
Уравнение удерживается на интервале, для времени . Начальные условия:
= 1,
= 0.
Граничные условия:
= 1.
Чтобы решить это уравнение в MATLAB, необходимо кодировать уравнение, начальные условия и граничные условия, затем выбрать подходящую сетку решения перед вызовом решателя pdepe. Требуемые функции можно либо включить в качестве локальных функций в конце файла (как здесь сделано), либо сохранить их как отдельные именованные файлы в каталоге по пути MATLAB.
Прежде чем кодировать уравнение, необходимо убедиться, что оно в форме, pdepe решатель ожидает:
x,t,u,∂u∂x).
В этой форме коэффициенты PDE являются матричными, и уравнение становится
u1-u2)].
Таким образом, значения коэффициентов в уравнении
0
11] (только диагональные значения)
=[0.024∂u1∂x0.170∂u2∂x]
u1-u2)]
Теперь можно создать функцию для кодирования уравнения. Функция должна иметь подпись [c,f,s] = pdefun(x,t,u,dudx):
x является независимой пространственной переменной.
t - независимая переменная времени.
u является зависимой переменной, дифференцируемой по отношению к x и t. Это двухэлементный вектор, где u(1) является t) иu(2) является t).
dudx - частная пространственная производная . Это двухэлементный вектор, где dudx(1) является и dudx(2) является .
Продукция c, f, и s соответствуют коэффициентам в стандартной форме уравнения PDE, ожидаемым 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
(Примечание: Все функции включены в качестве локальных функций в конце примера.)
Затем запишите функцию, которая возвращает начальное условие. Начальное условие применяется при первом значении времени и предоставляет значение t0) для любого значения x. Число начальных условий должно равняться числу уравнений, поэтому для этой задачи существует два начальных условия. Использовать подпись функцииu0 = pdeic(x) для записи функции.
Начальные условия:
= 1,
= 0.
Соответствующая функция:
function u0 = pdeic(x) u0 = [1; 0]; end
Теперь напишите функцию, которая вычисляет граничные условия
= 1.
Для проблем, возникающих в интервале , граничные условия применяются для всех и a, = b. Стандартная форма для граничных условий, ожидаемых решателем:
x,t,u,∂u∂x) = 0.
Записанные в этой форме граничные условия для частных производных должны быть выражены в терминах потока ). Таким образом, граничные условия для этой задачи
Для 0 уравнение
Коэффициенты:
0u2],
10].
Аналогично, для 1 уравнение
Коэффициенты:
u1-10],
01].
Граничная функция должна использовать сигнатуру функции [pl,ql,pr,qr] = pdebc(xl,ul,xr,ur,t):
Исходные данные xl и ul соответствуют и для левой границы.
Исходные данные xr и ur соответствуют и для правой границы.
t - независимая переменная времени.
Продукция pl и ql соответствуют u) x, t) для левой (x = 0 для этой задачи).
Продукция pr и qr соответствуют u) 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
Решение этой проблемы быстро меняется, когда мал. Хотя pdepe выбирает временной шаг, подходящий для разрешения резких изменений, для просмотра поведения на выходных графиках необходимо выбрать соответствующее время вывода. Для пространственной сетки в решении имеются граничные слои на обоих концах , поэтому для разрешения резких изменений необходимо указать там точки сетки.
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];
Наконец, решите уравнение, используя симметрию , уравнение PDE, начальные условия, граничные условия и сетки для и .
m = 0; sol = pdepe(m,@pdefun,@pdeic,@pdebc,x,t);
pdepe возвращает решение в массиве 3-D sol, где sol(i,j,k) аппроксимирует kтретий компонент раствора оценен на t(i) и x(j). Извлеките каждый компонент раствора в отдельную переменную.
u1 = sol(:,:,1); u2 = sol(:,:,2);
Создайте графики поверхности решений для и , выводимых на печать в выбранных точках сетки для и .
surf(x,t,u1) title('u_1(x,t)') xlabel('Distance x') ylabel('Time t')

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

Здесь перечислены локальные вспомогательные функции, которые решатель 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 % ---------------------------------------------