Решение УЧП с разрывом

В этом примере показано, как решить УЧП, который взаимодействует с материалом. Интерфейс материала создает разрыв в задаче x=0.5, и начальное условие имеет разрыв на правом контуре x=1.

Рассмотрите кусочно-линейный УЧП

{ut=x-2x(x25ux)-1000eu(0x0.5)ut=x-2x(x2ux)-eu(0.5x1)

Начальные условия

u(x,0)=0  (0x<1),u(1,0)=1  (x=1).

Граничные условия

       ux=0  (x=0),u(1,t)=1  (x=1).

Чтобы решить это уравнение в MATLAB, необходимо кодировать уравнение, начальные условия и граничные условия, затем выбрать подходящий mesh решения перед вызовом решателя pdepe. Можно либо включить необходимые функции в качестве локальных функций в конце файла (как это сделано здесь), либо сохранить их как отдельные, именованные файлы в директории по пути MATLAB.

Кодовое уравнение

Прежде чем вы сможете кодировать уравнение, вы должны убедиться, что это в форме, которую pdepe решатель ожидает. Стандартная форма, которая pdepe ожидает, что

c(x,t,u,ux)ut=x-mx(xmf(x,t,u,ux))+s(x,t,u,ux).

В этом случае УЧП находится в надлежащей форме, поэтому можно считать значения коэффициентов.

{ut=x-2x(x25ux)-1000eu(0x0.5)ut=x-2x(x2ux)-eu(0.5x1)

Значения для термина «поток» f(x,t,u,ux) и исходный термин s(x.t,u,ux) изменение в зависимости от значения x. Коэффициенты:

m=2

c(x,t,u,ux)=1

{f(x,t,u,ux)=5ux(0x0.5)f(x,t,u,ux)=ux(0.5x1)

{s(x,t,u,ux)=-1000eu(0x0.5)s(x,t,u,ux)=-eu(0.5x1)

Теперь можно создать функцию, чтобы кодировать уравнение. Функция должна иметь подпись [c,f,s] = pdex2pde(x,t,u,dudx):

  • x - независимая пространственная переменная.

  • t - независимая временная переменная.

  • u - зависимая переменная, дифференцируемая по отношению к x и t.

  • dudx - частная пространственная производная u/x.

  • Выходные выходы 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

(Примечание. Все функции включены в качестве локальных функций в конце примера.)

Начальные условия кода

Затем напишите функцию, которая возвращает начальные условия. Начальное условие применяется в первый раз и предоставляет значение u(x,t0) для любого значения x. Используйте сигнатуру функции u0 = pdex2ic(x) для записи функции.

Начальные условия

u(x,0)=0        (0x<1),u(1,0)=1        (x=1).

Соответствующая функция является

function u0 = pdex2ic(x)
if x < 1
    u0 = 0;
else
    u0 = 1;
end
end

Граничные условия кода

Теперь напишите функцию, которая оценивает граничные условия. Для задач, поставленных на интервале axb, граничные условия применяются для всех t и либо x=a или x=b. Стандартная форма для граничных условий, ожидаемых решателем,

p(x,t,u)+q(x,t)f(x,t,u,ux)=0.

Поскольку этот пример имеет сферическую симметрию (m=2), а pdepe решатель автоматически применяет условие левой границы, чтобы связать решение в источник, и игнорирует любые условия, заданные для левого контура в функции границы. Поэтому для левого граничного условия можно задать pL=qL=0. Для правого граничного условия можно переписать граничное условие в стандартной форме и считать значения коэффициентов для pR и qR.

Для x=1, уравнение u(1,t)=1(u-1)+0ux=0. Коэффициенты:

  • pR(1,t,u)=u-1

  • qR(1,t)=0

Граничная функция должна использовать сигнатуру функции [pl,ql,pr,qr] = pdex2bc(xl,ul,xr,ur,t):

  • Входы xl и ul соответствуют u и x для левого контура.

  • Входы xr и ur соответствуют u и x для правого контура.

  • t - независимая временная переменная.

  • Выходные выходы pl и ql соответствуют pL(x,t,u) и qL(x,t) для левого контура (x=0 для этой задачи).

  • Выходные выходы pr и qr соответствуют pR(x,t,u) и qR(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

Выберите Mesh решения

Пространственный mesh должна включать несколько значений около x=0.5 для расчета прерывистого интерфейса, а также точек около x=1 из-за несогласованного начального значения (u(1,0)=1) и краевое значение (u(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, уравнение УЧП, начальные условия, граничные условия и сетки для x и t.

m = 2;
sol = pdepe(m,@pdex2pde,@pdex2ic,@pdex2bc,x,t);

pdepe возвращает решение в трехмерный массив sol, где sol(i,j,k) аппроксимирует kпервый компонент решения uk оценивается в 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);

Решение для построения графика

Создайте объемную поверхностную диаграмму решения u нанесенный на график в выбранных точках mesh для x и t. С тех пор m=2 задача поставлена в сферической геометрии со сферической симметрией, поэтому решение изменяется только в радиальной x направление.

surf(x,t,u)
title('Numerical solution with nonuniform mesh')
xlabel('Distance x')
ylabel('Time t')
zlabel('Solution u')

Figure contains an axes. The axes with title Numerical solution with nonuniform mesh contains an object of type surface.

Теперь постройте график просто x и u для получения вида сбоку контуров на объемной поверхностной диаграмме. Добавьте линии в x=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')

Figure contains an axes. The axes with title Solution profiles at several times contains 17 objects of type line.

Локальные функции

Здесь перечислены локальные вспомогательные функции, которые решатель 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
%----------------------------------------------

См. также

Похожие темы