Main Content

初期条件のステップ関数をもつ PDE 系の求解

この例では、初期条件でステップ関数を使用する偏微分方程式系を解く方法を説明します。

次の PDE を考えます。

nt=x[dnx-ancx]+Srn(N-n),ct=2cx2+S(nn+1-c).

この方程式には定数パラメーター daSr、および N が含まれ、0x1 および t0 に対して定義されています。これらの方程式は、腫瘍に関連する血管新生の最初のステップの数学的モデルで使用されます [1]。n(x,t) は内皮細胞の細胞密度を表し、c(x,t) は腫瘍に反応して放出されるタンパク質の濃度を表します。

この問題は、次の場合に持続的な定常状態となります。

[n0c0]=[10.5].

ただし、安定性解析によって系の発展は非同次解であると予測されています [1]。したがって、ステップ関数は初期条件として使用されて定常状態に摂動を与え、系の発展を促します。

境界条件では、x=0x=1 において両方の解要素の流束がゼロであることが要求されます。

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

この方程式系を MATLAB® で解くには、方程式、初期条件、境界条件をコード化し、適切な解のメッシュを選択してから、ソルバー pdepe を呼び出す必要があります。(ここで行ったように) 必要な関数をファイルの最後にローカル関数として含めることも、あるいは個別の名前付きファイルとして MATLAB パスのディレクトリに保存することもできます。

方程式のコード化

方程式をコード化する前に、それが pdepe ソルバーで想定される形式であることを確認する必要があります。

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

PDE 系には 2 つの方程式があるため、この PDE 系を次のように書き換えることができます。

[1001]t[nc]=x[dnx-ancxcx]+[Srn(N-n)S(nn+1-c)].

したがって、方程式の係数の値は次のようになります。

m=0

c(x,t,u,ux)=[11] (対角値のみ)

f(x,t,u,ux)=[dnx-ancxcx]

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

これで、方程式をコード化する関数を作成できるようになりました。この関数にはシグネチャ [c,f,s] = angiopde(x,t,u,dudx) がなければなりません。

  • x は独立空間変数。

  • t は独立時間変数。

  • u は、x および t について微分される従属変数。これは 2 要素ベクトルで、u(1)n(x,t)u(2)c(x,t) です。

  • dudx は空間偏導関数 u/x。これは 2 要素ベクトルで、dudx(1)n/xdudx(2)c/x です。

  • 出力 cf、および s は、pdepe で想定される標準 PDE 方程式形式の係数に対応。

結果として、この例の方程式は次の関数で表すことができます。

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.05u10.3x0.61.0005u20.3x0.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.

区間 axb で提示される問題について、境界条件はすべての t、および x=a または x=b のいずれかに適用されます。ソルバーで想定される境界条件の標準形式は次のとおりです。

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

x=0 の場合、境界条件の方程式は次のとおりです。

[00]+[11][dnx-ancxcx]=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 は左境界 (この問題では x=0) の pL(x,t,u) および qL(x,t) に対応。

  • 出力 pr および qr は右境界 (この問題では x=1) の pR(x,t,u) および qR(x,t) に対応。

この例の境界条件は次の関数で表されます。

function [pl,ql,pr,qr] = angiobc(xl,ul,xr,ur,t)
pl = [0; 0];
ql = [1; 1];
pr = pl;
qr = ql;
end

解のメッシュの選択

方程式の漸近挙動を確認するには長い時間間隔が必要であるため、区間 0t200 では 10 個の点を使用します。また、c(x,t) の極限分布は区間 0x1 全体で約 0.1% しか変化しないため、比較的細かい 50 個の点の空間メッシュが適切です。

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

方程式の求解

最後に、対称性 m、PDE 方程式、初期条件、境界条件、および xt のメッシュを使用して方程式を解きます。

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

pdepe は 3 次元配列 sol に解を返します。ここで、sol(i,j,k)t(i)x(j) で評価した解の k 番目の要素 uk を近似します。解要素を別々の変数に抽出します。

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

解のプロット

xt の選択されたメッシュ点でプロットされた、解要素 nc の表面プロットを作成します。

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

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

次に、tf=200 における解の最終分布のみをプロットします。これらのプロットは [1] の図 3 と図 4 に対応します。

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

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

参照

[1] Humphreys, M.E. and M.A.J. Chaplain. "A mathematical model of the first steps of tumour-related angiogenesis: Capillary sprout formation and secondary branching." IMA Journal of Mathematics Applied in Medicine & Biology, 13 (1996), pp. 73-98.

ローカル関数

ここでは、PDE ソルバー pdepe が解を計算するために呼び出すローカル補助関数を紹介しています。あるいは、これらの関数を独自のファイルとして 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
% ---------------------------------------------

参考

関連するトピック