В этом примере показано, как решить УЧП, который взаимодействует с материалом. Интерфейс материала создает разрыв в задаче , и начальное условие имеет разрыв на правом контуре .
Рассмотрите кусочно-линейный УЧП
Начальные условия
Граничные условия
Чтобы решить это уравнение в 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 %----------------------------------------------