В этом примере показано, как решить PDE, который взаимодействует с материалом. Интерфейс материала создает разрыв в задаче при 0,5, а исходное условие имеет разрыв в правой = 1.
Рассмотрим кусочно PDE
0.5≤x≤1)
Начальные условия:
(x = 1).
Граничные условия:
x = 1).
Чтобы решить это уравнение в MATLAB, необходимо кодировать уравнение, начальные условия и граничные условия, затем выбрать подходящую сетку решения перед вызовом решателя pdepe. Требуемые функции можно либо включить в качестве локальных функций в конце файла (как здесь сделано), либо сохранить их как отдельные именованные файлы в каталоге по пути MATLAB.
Прежде чем кодировать уравнение, необходимо убедиться, что оно находится в форме, которая pdepe решатель ожидает. Стандартная форма, которая pdepe ожидает, что
x,t,u,∂u∂x).
В этом случае PDE находится в правильной форме, поэтому можно считывать значения коэффициентов.
0.5≤x≤1)
Значения для члена потока ) и члена источника x.t,u,∂u∂x) изменяются в зависимости от значения x. Коэффициенты:
2
= 1
0.5≤x≤1)
(0.5≤x≤1)
Теперь можно создать функцию для кодирования уравнения. Функция должна иметь подпись [c,f,s] = pdex2pde(x,t,u,dudx):
x является независимой пространственной переменной.
t - независимая переменная времени.
u является зависимой переменной, дифференцируемой по отношению к x и t.
dudx - частная пространственная производная .
Продукция c, f, и s соответствуют коэффициентам в стандартной форме уравнения PDE, ожидаемым 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
(Примечание: Все функции включены в качестве локальных функций в конце примера.)
Затем запишите функцию, которая возвращает начальные условия. Начальное условие применяется при первом значении и предоставляет значение t0) для любого значения x. Используйте сигнатуру функцииu0 = pdex2ic(x) для записи функции.
Начальные условия:
Соответствующая функция:
function u0 = pdex2ic(x) if x < 1 u0 = 0; else u0 = 1; end end
Теперь напишите функцию, которая вычисляет граничные условия. Для проблем, возникающих в интервале , граничные условия применяются для всех t и a, = b. Стандартная форма для граничных условий, ожидаемых решателем:
x,t,u,∂u∂x) = 0.
Поскольку этот пример имеет сферическую симметрию (2), pdepe решатель автоматически применяет левое граничное условие для привязки решения в начале координат и игнорирует любые условия, указанные для левой границы в граничной функции. Поэтому для условия левой границы можно задать = 0. Для правого граничного условия можно переписать граничное условие в стандартной форме и считать значения коэффициентов для pR и qR.
Для 1 уравнение равно +0⋅∂u∂x=0. Коэффициенты:
= u-1
= 0
Граничная функция должна использовать сигнатуру функции [pl,ql,pr,qr] = pdex2bc(xl,ul,xr,ur,t):
Исходные данные xl и ul соответствуют u и x для левой границы.
Исходные данные xr и ur соответствуют u и x для правой границы.
t - независимая переменная времени.
Продукция pl и ql соответствуют u) x, t) для левой (x = 0 для этой задачи).
Продукция pr и qr соответствуют u) x, t) для правой (x = 1 для этой задачи).
Граничные условия в этом примере представлены функцией:
function [pl,ql,pr,qr] = pdex2bc(xl,ul,xr,ur,t) pl = 0; ql = 0; pr = ur - 1; qr = 0; end
Пространственная сетка должна включать несколько значений около 0,5 для учета прерывистого интерфейса, а также точки = 1 из-за противоречивости начального 1,0) = 1) и граничного (1, t) = 0) в этой точке. Решение быстро изменяется для малых t, поэтому используйте временной шаг, который может разрешить это резкое изменение.
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, уравнение PDE, начальные условия, граничные условия и сетки для x и t.
m = 2; sol = pdepe(m,@pdex2pde,@pdex2ic,@pdex2bc,x,t);
pdepe возвращает решение в массиве 3-D sol, где sol(i,j,k) аппроксимирует kтретий компонент раствора оценен на t(i) и x(j). Размер sol является length(t)около-length(x)около-length(u0), так как u0 задает начальное условие для каждого компонента решения. Для этой проблемы, u имеет только один компонент, поэтому sol является матрицей 8 на 18, но в целом можно извлечь kКомпонент решения th с командой u = sol(:,:,k).
Извлечь первый компонент раствора из sol.
u = sol(:,:,1);
Создайте график поверхности решения , построенного в выбранных точках сетки для и t. Поскольку 2, задача ставится в сферической геометрии со сферической симметрией, поэтому решение изменяется только в направлении x.
surf(x,t,u) title('Numerical solution with nonuniform mesh') xlabel('Distance x') ylabel('Time t') zlabel('Solution u')

Теперь постройте график только и , чтобы получить вид сбоку контуров на графике поверхности. Добавьте строку при 0,5 для выделения эффекта интерфейса материала.
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 %----------------------------------------------