В этом примере показано, как сформулировать, вычислите и постройте решение одного УЧП.
Рассмотрите дифференциальное уравнение с частными производными
Уравнение определено на интервале в течение многих времен . В , решение удовлетворяет начальному условию
Кроме того, в и , решение удовлетворяет граничным условиям
Чтобы решить это уравнение в MATLAB, необходимо закодировать уравнение, начальные условия и граничные условия, затем выбрать подходящую mesh решения прежде, чем вызвать решатель pdepe. Вы любой может включать необходимые функции как локальные функции в конце файла (как сделано здесь) или сохранить их как отдельные, именованные файлы в директории на пути MATLAB.
Прежде чем можно будет закодировать уравнение, необходимо переписать его в форме что pdepe решатель ожидает. Стандартная форма, что pdepe ожидает
.
Написанный в этой форме, УЧП становится
.
Уравнением в соответствующей форме можно прочитать соответствующие условия:
Теперь можно создать функцию, чтобы закодировать уравнение. Функция должна иметь подпись [c,f,s] = pdex1pde(x,t,u,dudx):
x независимая пространственная переменная.
t независимая переменная времени.
u зависимая переменная, дифференцируемая относительно x и t.
dudx частичная пространственная производная .
Выходные параметры cF, и s соответствуйте коэффициентам в стандартной форме уравнения УЧП, ожидаемой pdepe. Эти коэффициенты закодированы в терминах входных переменных xTU, и 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
Теперь запишите функцию, которая оценивает граничные условия. Для проблем, созданных на интервале , граничные условия применяются ко всем и также или . Стандартная форма для граничных условий, ожидаемых решателем,
Перепишите граничные условия в этой стандартной форме и прочитайте содействующие значения.
Для , уравнение
Коэффициенты:
Для , уравнение
Коэффициенты:
Поскольку функция граничного условия выражается в терминах , и этот термин уже задан в основной функции УЧП, вы не должны задавать эту часть уравнения в функции граничного условия. Вы должны только задать значения и на каждом контуре.
Граничная функция должна использовать функциональную подпись [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компонент th решения оцененный в t(i) и x(j). Размер sol length(t)- length(x)- length(u0), начиная с u0 задает начальное условие для каждого компонента решения. Для этой проблемы, u имеет только один компонент, таким образом, sol 5 20 матрица, но в целом можно извлечь kкомпонент решения th с командой 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 %----------------------------------------------