В этом примере показано, как сформулировать, вычислите и постройте решение системы двух дифференциальных уравнений с частными производными.
Рассмотрите систему УЧП
(Функция используется в качестве сокращения.)
Уравнение держится интервал в течение многих времен . Начальные условия
Граничные условия
Чтобы решить это уравнение в 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
компонент th решения оцененный в 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')
Перечисленный здесь локальные функции помощника что решатель УЧП 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 % ---------------------------------------------