Этот пример показывает, как сформулировать, вычислить и построить график решения для одного УЧП.
Рассмотрим дифференциальное уравнение с частными производными
Уравнение определяется интервалом для раз . В , решение удовлетворяет начальному условию
Кроме того, в и , решение удовлетворяет граничным условиям
Чтобы решить это уравнение в MATLAB, необходимо кодировать уравнение, начальные условия и граничные условия, затем выбрать подходящий mesh решения перед вызовом решателя pdepe. Можно либо включить необходимые функции в качестве локальных функций в конце файла (как это сделано здесь), либо сохранить их как отдельные, именованные файлы в директории по пути MATLAB.
Прежде чем вы сможете кодировать уравнение, необходимо переписать его в форме, которую pdepe решатель ожидает. Стандартная форма, которая pdepe ожидает, что
.
Написанный в этой форме, УЧП становится
.
С помощью уравнения в надлежащей форме можно считать релевантные условия:
Теперь можно создать функцию, чтобы кодировать уравнение. Функция должна иметь подпись [c,f,s] = pdex1pde(x,t,u,dudx):
x - независимая пространственная переменная.
t - независимая временная переменная.
u - зависимая переменная, дифференцируемая по отношению к x и t.
dudx - частная пространственная производная .
Выходные выходы c, f, и s соответствуют коэффициентам в стандартной форме уравнения УЧП, ожидаемым по pdepe. Эти коэффициенты кодируются в терминах входных переменных x, t, u, и dudx.
В результате уравнение в этом примере может быть представлено функцией:
function [c,f,s] = pdex1pde(x,t,u,dudx) c = pi^2; f = dudx; s = 0; end
(Примечание. Все функции включены в качестве локальных функций в конце примера.)
Затем напишите функцию, которая возвращает начальное условие. Начальное условие применяется при первом временном значении tspan(1). Функция должна иметь подпись u0 = pdex1ic(x).
Соответствующая функция является
function u0 = pdex1ic(x) u0 = sin(pi*x); end
Теперь напишите функцию, которая оценивает граничные условия. Для задач, поставленных на интервале , граничные условия применяются для всех и либо или . Стандартная форма для граничных условий, ожидаемых решателем,
Перепишите граничные условия в этой стандартной форме и считайте значения коэффициентов.
Для , уравнение
Коэффициенты:
Для , уравнение
Коэффициенты:
Поскольку функция граничного условия выражена в терминах , и этот термин уже определен в основной функции PDE, вам не нужно задавать эту часть уравнения в функции граничных условий. Вам нужно только задать значения и на каждом контуре.
Граничная функция должна использовать сигнатуру функции [pl,ql,pr,qr] = pdex1bc(xl,ul,xr,ur,t):
Входы xl и ul соответствуют и для левого контура.
Входы xr и ur соответствуют и для правого контура.
t - независимая временная переменная.
Выходные выходы pl и ql соответствуют и для левого контура ( для этой задачи).
Выходные выходы pr и qr соответствуют и для правого контура ( для этой задачи).
Граничные условия в этом примере представлены функцией:
function [pl,ql,pr,qr] = pdex1bc(xl,ul,xr,ur,t) pl = ul; ql = 0; pr = pi * exp(-t); qr = 1; end
Перед решением уравнения необходимо задать точки mesh при котором вы хотите pdepe для оценки решения. Задайте точки как векторы t и x. Векторы t и x играть различные роли в решателе. В частности, стоимость и точность решения сильно зависят от длины вектора x. Однако расчет намного менее чувствительно к значениям в векторе t.
Для этой задачи используйте mesh с 20 равномерно разнесенными точками в пространственном интервале [0,1] и пятью значениями t из временного интервала [0,2].
x = linspace(0,1,20); t = linspace(0,2,5);
Наконец, решить уравнение используя симметрию m, уравнение УЧП, начальные условия, граничные условия и сетки для x и t.
m = 0; sol = pdepe(m,@pdex1pde,@pdex1ic,@pdex1bc,x,t);
pdepe возвращает решение в трехмерный массив sol, где sol(i,j,k) аппроксимирует kпервый компонент решения оценивается в t(i) и x(j). Размер sol является length(t)-by- length(x)-by- length(u0), с u0 задает начальное условие для каждого компонента решения. Для этой задачи u имеет только один компонент, так что sol является матрицей 5 на 20, но в целом можно извлечь kкомпонент решения с командой u = sol(:,:,k).
Извлеките первый компонент решения из sol.
u = sol(:,:,1);
Создать объемную поверхностную диаграмму решения.
surf(x,t,u) title('Numerical solution computed with 20 mesh points') xlabel('Distance x') ylabel('Time t')

Начальное условие и краевые условия этой задачи были выбраны так, чтобы было аналитическое решение, заданное как
Постройте график аналитического решения с теми же точками mesh.
surf(x,t,exp(-t)'*sin(pi*x)) title('True solution plotted with 20 mesh points') xlabel('Distance x') ylabel('Time t')

Теперь сравните числовые и аналитические решения в , окончательное значение . В этом примере .
plot(x,u(end,:),'o',x,exp(-t(end))*sin(pi*x)) title('Solution at t = 2') legend('Numerical, 20 mesh points','Analytical','Location','South') xlabel('Distance x') ylabel('u(x,2)')

Здесь перечислены локальные вспомогательные функции, которые УЧП решателя pdepe вызывает для вычисления решения. Также можно сохранить эти функции как собственные файлы в директории по пути MATLAB.
function [c,f,s] = pdex1pde(x,t,u,dudx) % Equation to solve c = pi^2; f = dudx; s = 0; end %---------------------------------------------- function u0 = pdex1ic(x) % Initial conditions u0 = sin(pi*x); end %---------------------------------------------- function [pl,ql,pr,qr] = pdex1bc(xl,ul,xr,ur,t) % Boundary conditions pl = ul; ql = 0; pr = pi * exp(-t); qr = 1; end %----------------------------------------------