В этом примере показано, как решить УЧП, который взаимодействует с материалом. Интерфейс материала создает разрыв в задаче , и начальное условие имеет разрыв на правом контуре .
Рассмотрите кусочно-линейный УЧП
Начальные условия
Граничные условия
Чтобы решить это уравнение в MATLAB, необходимо кодировать уравнение, начальные условия и граничные условия, затем выбрать подходящий mesh решения перед вызовом решателя pdepe
. Можно либо включить необходимые функции в качестве локальных функций в конце файла (как это сделано здесь), либо сохранить их как отдельные, именованные файлы в директории по пути MATLAB.
Прежде чем вы сможете кодировать уравнение, вы должны убедиться, что это в форме, которую pdepe
решатель ожидает. Стандартная форма, которая pdepe
ожидает, что
.
В этом случае УЧП находится в надлежащей форме, поэтому можно считать значения коэффициентов.
Значения для термина «поток» и исходный термин изменение в зависимости от значения . Коэффициенты:
Теперь можно создать функцию, чтобы кодировать уравнение. Функция должна иметь подпись [c,f,s] = pdex2pde(x,t,u,dudx)
:
x
- независимая пространственная переменная.
t
- независимая временная переменная.
u
- зависимая переменная, дифференцируемая по отношению к x
и t
.
dudx
- частная пространственная производная .
Выходные выходы c
, f
, и s
соответствуют коэффициентам в стандартной форме уравнения УЧП, ожидаемым по pdepe
. Эти коэффициенты кодируются в терминах входных переменных x
, t
, u
, и dudx
.
В результате уравнение в этом примере может быть представлено функцией:
function [c,f,s] = pdex2pde(x,t,u,dudx) c = 1; if x <= 0.5 f = 5*dudx; s = -1000*exp(u); else f = dudx; s = -exp(u); end end
(Примечание. Все функции включены в качестве локальных функций в конце примера.)
Затем напишите функцию, которая возвращает начальные условия. Начальное условие применяется в первый раз и предоставляет значение для любого значения . Используйте сигнатуру функции u0 = pdex2ic(x)
для записи функции.
Начальные условия
Соответствующая функция является
function u0 = pdex2ic(x) if x < 1 u0 = 0; else u0 = 1; end end
Теперь напишите функцию, которая оценивает граничные условия. Для задач, поставленных на интервале , граничные условия применяются для всех t и либо или . Стандартная форма для граничных условий, ожидаемых решателем,
Поскольку этот пример имеет сферическую симметрию (), а pdepe
решатель автоматически применяет условие левой границы, чтобы связать решение в источник, и игнорирует любые условия, заданные для левого контура в функции границы. Поэтому для левого граничного условия можно задать . Для правого граничного условия можно переписать граничное условие в стандартной форме и считать значения коэффициентов для и .
Для , уравнение . Коэффициенты:
Граничная функция должна использовать сигнатуру функции [pl,ql,pr,qr] = pdex2bc(xl,ul,xr,ur,t)
:
Входы xl
и ul
соответствуют u и x для левого контура.
Входы xr
и ur
соответствуют u и x для правого контура.
t
- независимая временная переменная.
Выходные выходы pl
и ql
соответствуют и для левого контура ( для этой задачи).
Выходные выходы pr
и qr
соответствуют и для правого контура ( для этой задачи).
Граничные условия в этом примере представлены функцией:
function [pl,ql,pr,qr] = pdex2bc(xl,ul,xr,ur,t) pl = 0; ql = 0; pr = ur - 1; qr = 0; end
Пространственный mesh должна включать несколько значений около для расчета прерывистого интерфейса, а также точек около из-за несогласованного начального значения () и краевое значение () в эту точку. Решение быстро изменяется для малых , так что используйте временной шаг, который может разрешить это резкое изменение.
x = [0 0.1 0.2 0.3 0.4 0.45 0.475 0.5 0.525 0.55 0.6 0.7 0.8 0.9 0.95 0.975 0.99 1]; t = [0 0.001 0.005 0.01 0.05 0.1 0.5 1];
Наконец, решить уравнение используя симметрию m
, уравнение УЧП, начальные условия, граничные условия и сетки для x
и t
.
m = 2; sol = pdepe(m,@pdex2pde,@pdex2ic,@pdex2bc,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
является матрицей 8 на 18, но в целом можно извлечь k
компонент решения с командой u = sol(:,:,k)
.
Извлеките первый компонент решения из sol
.
u = sol(:,:,1);
Создайте объемную поверхностную диаграмму решения нанесенный на график в выбранных точках mesh для и . С тех пор задача поставлена в сферической геометрии со сферической симметрией, поэтому решение изменяется только в радиальной направление.
surf(x,t,u) title('Numerical solution with nonuniform mesh') xlabel('Distance x') ylabel('Time t') zlabel('Solution u')
Теперь постройте график просто и для получения вида сбоку контуров на объемной поверхностной диаграмме. Добавьте линии в для выделения эффекта интерфейса материала.
plot(x,u,x,u,'*') line([0.5 0.5], [-3 1], 'Color', 'k') xlabel('Distance x') ylabel('Solution u') title('Solution profiles at several times')
Здесь перечислены локальные вспомогательные функции, которые решатель PDE pdepe
вызывается для вычисления решения. Также можно сохранить эти функции как собственные файлы в директории по пути MATLAB.
function [c,f,s] = pdex2pde(x,t,u,dudx) % Equation to solve c = 1; if x <= 0.5 f = 5*dudx; s = -1000*exp(u); else f = dudx; s = -exp(u); end end %---------------------------------------------- function u0 = pdex2ic(x) %Initial conditions if x < 1 u0 = 0; else u0 = 1; end end %---------------------------------------------- function [pl,ql,pr,qr] = pdex2bc(xl,ul,xr,ur,t) % Boundary conditions pl = 0; ql = 0; pr = ur - 1; qr = 0; end %----------------------------------------------