exponenta event banner

Система решения PDE с пошаговыми функциями начального состояния

В этом примере показано, как решить систему дифференциальных уравнений в частных производных, которая использует ступенчатые функции в начальных условиях.

Рассмотрим PDE

∂n∂t=∂∂x[d∂n∂x-a n∂c∂x]+S r n (N-n), ∂c∂t=∂2c∂x2+S (nn + 1-c).

Уравнения включают постоянные параметры d, a, S, r и N и определяются для 0≤x≤1 и t≥0. Эти уравнения возникают в математической модели первых шагов ангиогенеза, связанного с опухолью [1]. n (x, t) представляет плотность клеток эндотелиальных клеток и c (x, t) концентрацию белка, который они выделяют в ответ на опухоль.

Эта проблема имеет постоянное, устойчивое состояние, когда

[n0c0] = [10.5].

Однако анализ стабильности предсказывает переход системы к неоднородному решению [1]. Таким образом, ступенчатые функции используются в качестве исходных условий для возмущения устойчивого состояния и стимулирования эволюции системы.

Граничные условия требуют, чтобы оба компонента раствора имели нулевой поток при x = 0 и x = 1.

∂∂xn (0, t) =∂∂xn (1, t) =0,∂∂xc (0, t) =∂∂xc (1, t) = 0.

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

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

Прежде чем кодировать уравнение, необходимо убедиться, что оно в форме, pdepe решатель ожидает:

c (x,t,u,∂u∂x) ∂u∂t=x-m∂∂x (xmf (x,t,u,∂u∂x)) + s (x,t,u,∂u∂x).

Поскольку в системе ПДЭ существует два уравнения, система ПДЭ может быть переписана как

[1001]∂∂t[nc]=∂∂x[d∂n∂x-a n∂c∂x∂c∂x]+[S r n (N-n) S (nn + 1-c)].

Значения коэффициентов в уравнении затем

m = 0

c (x,t,u,∂u∂x) = [11] (только диагональные значения)

f (x,t,u,∂u∂x) =[d∂n∂x-a n∂c∂x∂c∂x]

s (x,t,u,∂u∂x) = [S r n (N-n) S (nn + 1-c)]

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

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

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

  • u является зависимой переменной, дифференцируемой по отношению к x и t. Это двухэлементный вектор, где u(1) n (x, t) иu(2) является c (x, t).

  • dudx - частная пространственная производная ∂u/∂x. Это двухэлементный вектор, где dudx(1) является ∂n/∂x и dudx(2) является ∂c/∂x.

  • Продукция c, f, и s соответствуют коэффициентам в стандартной форме уравнения PDE, ожидаемым pdepe.

В результате уравнения в этом примере могут быть представлены функцией:

function [c,f,s] = angiopde(x,t,u,dudx)
d = 1e-3;
a = 3.8;
S = 3;
r = 0.88;
N = 1;

c = [1; 1];
f = [d*dudx(1) - a*u(1)*dudx(2)
     dudx(2)];
s = [S*r*u(1)*(N - u(1));
     S*(u(1)/(u(1) + 1) - u(2))];
end

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

Исходные условия кода

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

Эта проблема имеет постоянное, устойчивое состояние, когда

[n0c0] = [10.5].

Однако анализ стабильности предсказывает эволюцию системы в негомогенное решение [1]. Таким образом, ступенчатые функции используются в качестве исходных условий для возмущения установившегося состояния и стимулирования эволюции системы.

u (x, 0) = [n0c0], u (x, 0) = {1.05u1 0.3≤x≤0.61.0005u20.3≤x≤0.6

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

function u0 = angioic(x)
u0 = [1; 0.5];
if x >= 0.3 && x <= 0.6
  u0(1) = 1.05 * u0(1);
  u0(2) = 1.0005 * u0(2);
end
end

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

Теперь напишите функцию, которая вычисляет граничные условия

∂∂xn (0, t) =∂∂xn (1, t) =0,∂∂xc (0, t) =∂∂xc (1, t) = 0.

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

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

Для x = 0 уравнение граничного условия

[00]+[11]⋅[d∂n∂x-a n∂c∂x∂c∂x]=0.

Таким образом, коэффициенты:

  • pL (x, t, u) = [00],

  • qL (x, t) = [11].

Для x = 1 граничные условия одинаковы, так что pR (x, t, u) = [00] и qR (x, t) = [11].

Граничная функция должна использовать сигнатуру функции [pl,ql,pr,qr] = angiobc(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] = angiobc(xl,ul,xr,ur,t)
pl = [0; 0];
ql = [1; 1];
pr = pl;
qr = ql;
end

Выбрать сетку решения

Для просмотра ограничивающего поведения уравнений требуется длительный временной интервал, поэтому используйте 10 точек в 0≤t≤200 интервала. Кроме того, предельное распределение c (x, t) изменяется только примерно на 0,1% по 0≤x≤1 интервалу, поэтому подходящая относительно тонкая пространственная сетка с 50 точками.

x = linspace(0,1,50);
t = linspace(0,200,10);

Уравнение решения

Наконец, решите уравнение, используя симметрию m, уравнение PDE, начальное условие, граничные условия и сетки для x и t.

m = 0;
sol = pdepe(m,@angiopde,@angioic,@angiobc,x,t);

pdepe возвращает решение в массиве 3-D sol, где sol(i,j,k) аппроксимирует kтретий компонент раствора uk оценен на t(i) и x(j). Извлеките компоненты решения в отдельные переменные.

n = sol(:,:,1);
c = sol(:,:,2);

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

Создайте график поверхности компонентов решения n и c, построенный в выбранных точках сетки для x и t.

surf(x,t,c)
title('c(x,t): Concentration of Fibronectin')
xlabel('Distance x')
ylabel('Time t')

Figure contains an axes. The axes with title c(x,t): Concentration of Fibronectin contains an object of type surface.

surf(x,t,n)
title('n(x,t): Density of Endothelial Cells')
xlabel('Distance x')
ylabel('Time t')

Figure contains an axes. The axes with title n(x,t): Density of Endothelial Cells contains an object of type surface.

Теперь постройте график только конечных распределений решений при tf = 200. Эти графики соответствуют рисункам 3 и 4 в [1].

plot(x,n(end,:))
title('Final distribution of n(x,t_f)')

Figure contains an axes. The axes with title Final distribution of n(x,t_f) contains an object of type line.

plot(x,c(end,:))
title('Final distribution of c(x,t_f)')

Figure contains an axes. The axes with title Final distribution of c(x,t_f) contains an object of type line.

Ссылки

[1] Хамфрис, М.Е. и М.А.Дж. Капеллан. «Математическая модель первых шагов ангиогенеза, связанного с опухолью: образование капиллярных ростков и вторичное разветвление». IMA Journal of Mathematics Applied in Medicine & Biology, 13 (1996), стр. 73-98.

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

Здесь перечислены локальные вспомогательные функции, которые вызывает pdepe решателя PDE для вычисления решения. Кроме того, эти функции можно сохранить в виде собственных файлов в каталоге по пути MATLAB.

function [c,f,s] = angiopde(x,t,u,dudx) % Equation to solve
d = 1e-3;
a = 3.8;
S = 3;
r = 0.88;
N = 1;

c = [1; 1];
f = [d*dudx(1) - a*u(1)*dudx(2)
     dudx(2)];
s = [S*r*u(1)*(N - u(1));
     S*(u(1)/(u(1) + 1) - u(2))];
end
% ---------------------------------------------
function u0 = angioic(x) % Initial Conditions
u0 = [1; 0.5];
if x >= 0.3 && x <= 0.6
  u0(1) = 1.05 * u0(1);
  u0(2) = 1.0005 * u0(2);
end
end
% ---------------------------------------------
function [pl,ql,pr,qr] = angiobc(xl,ul,xr,ur,t) % Boundary Conditions
pl = [0; 0];
ql = [1; 1];
pr = pl;
qr = ql;
end
% ---------------------------------------------

См. также

Связанные темы