Этот пример показывает, как сформулировать, вычислить и построить график решения системы двух дифференциальных уравнений с частными производными.
Рассмотрите систему PDE
(Функция используется в качестве стенограммы.)
Уравнение удерживается на интервале для раз . Начальные условия
Граничные условия
Чтобы решить это уравнение в MATLAB, необходимо кодировать уравнение, начальные условия и граничные условия, затем выбрать подходящий mesh решения перед вызовом решателя pdepe
. Можно либо включить необходимые функции в качестве локальных функций в конце файла (как это сделано здесь), либо сохранить их как отдельные, именованные файлы в директории по пути MATLAB.
Прежде чем вы сможете кодировать уравнение, необходимо убедиться, что это в том виде, в котором pdepe
решатель ожидает:
В этой форме коэффициенты УЧП являются матричными, и уравнение становится
Таким образом, значения коэффициентов в уравнении
(только по диагонали)
Теперь можно создать функцию, чтобы кодировать уравнение. Функция должна иметь подпись [c,f,s] = pdefun(x,t,u,dudx)
:
x
- независимая пространственная переменная.
t
- независимая временная переменная.
u
- зависимая переменная, дифференцируемая по отношению к x
и t
. Это двухэлементный вектор, где u(1)
является и u(2)
является .
dudx
- частная пространственная производная . Это двухэлементный вектор, где dudx(1)
является и dudx(2)
является .
Выходные выходы 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
(Примечание. Все функции включены в качестве локальных функций в конце примера.)
Затем напишите функцию, которая возвращает начальное условие. Начальное условие применяется в первый раз и предоставляет значение для любого значения x. Количество начальных условий должно равняться количеству уравнений, поэтому для этой задачи существует два начальных условия. Используйте сигнатуру функции u0 = pdeic(x)
для записи функции.
Начальные условия
Соответствующая функция является
function u0 = pdeic(x) u0 = [1; 0]; end
Теперь напишите функцию, которая оценивает граничные условия
Для задач, поставленных на интервале , граничные условия применяются для всех и либо или . Стандартная форма для граничных условий, ожидаемых решателем,
Записанные в этой форме граничные условия для частных производных должны быть выражены в терминах потока . Таким образом, граничные условия для этой задачи
Для , уравнение
Коэффициенты:
Аналогично, для уравнение
Коэффициенты:
Граничная функция должна использовать сигнатуру функции [pl,ql,pr,qr] = pdebc(xl,ul,xr,ur,t)
:
Входы xl
и ul
соответствуют и для левого контура.
Входы xr
и ur
соответствуют и для правого контура.
t
- независимая временная переменная.
Выходные выходы pl
и ql
соответствуют и для левого контура ( для этой задачи).
Выходные выходы pr
и qr
соответствуют и для правого контура ( для этой задачи).
Граничные условия в этом примере представлены функцией:
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
выбирает временной шаг, подходящий для разрешения резких изменений, чтобы увидеть поведение на выходных графиках, необходимо выбрать соответствующее время выхода. Для пространственного mesh в решении есть граничные слои на обоих концах , поэтому необходимо задать точки 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 = 0; sol = pdepe(m,@pdefun,@pdeic,@pdebc,x,t);
pdepe
возвращает решение в трехмерный массив sol
, где sol(i,j,k)
аппроксимирует k
первый компонент решения оценивается в t(i)
и x(j)
. Извлеките каждый компонент решения в отдельную переменную.
u1 = sol(:,:,1); u2 = sol(:,:,2);
Создайте объемные поверхностные диаграммы решений для и нанесенный на график в выбранных точках mesh для и .
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 % ---------------------------------------------