В этом примере показано, как сформулировать, вычислите и постройте решение одного УЧП.
Рассмотрите дифференциальное уравнение с частными производными
Уравнение определено на интервале в течение многих времен . В , решение удовлетворяет начальному условию
Кроме того, в и , решение удовлетворяет граничным условиям
Чтобы решить это уравнение в 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
Теперь запишите функцию, которая оценивает граничные условия. Для проблем, созданных на интервале , граничные условия применяются ко всем и также или . Стандартная форма для граничных условий, ожидаемых решателем,
Перепишите граничные условия в этой стандартной форме и прочитайте содействующие значения.
Для , уравнение
Коэффициенты:
Для , уравнение
Коэффициенты:
Поскольку функция граничного условия выражается в терминах , и этот термин уже задан в основной функции УЧП, вы не должны задавать эту часть уравнения в функции граничного условия. Вы должны только задать значения и на каждом контуре.
Граничная функция должна использовать функциональную подпись [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 %----------------------------------------------