![]() |
![]() |
Pomacanthus imperator BY Jordi Payà (CC BY-ND 2.0) https://www.flickr.com/photos/arg0s/14162350619 |
2成分(2種類の物質U,Vの濃度u,v)の拡散反応方程式 \[ \frac{\partial u}{\partial t} = D_u \Delta u + F(u,v) \] \[ \frac{\partial v}{\partial t} = D_v \Delta v + G(u,v) \] 第1項は拡散項でDu,Dvは拡散係数を表す。Δu,Δvはそれぞれu,vのラプラシアンでx,yの2次元の場合、以下のようになる \[\Delta u = \frac{\partial^2 u}{\partial x^2}+\frac{\partial^2 u}{\partial y^2}\] \[\Delta v = \frac{\partial^2 v}{\partial x^2}+\frac{\partial^2 v}{\partial y^2}\] 第2項は反応項でF(u,v)、G(u,v)は局所的な反応を示すu,vについての関数で表される。
//ラプラシアンの数値計算
//laplacian_u,laplacian_vはそれぞれU,Vについてのラプラシアン、hは微小増分に対応
laplacian_u=(u[i+1][j]+u[i][j+1]+u[i-1][j]+u[i][j-1]-4*u[i][j])/(h*h);
laplacian_v=(v[i+1][j]+v[i][j+1]+v[i-1][j]+v[i][j-1]-4*v[i][j])/(h*h);
//拡散反応方程式(Gray-Scottモデル)の数値計算
//Du,Dvはそれぞれu,vの拡散係数、fはuの補充率(feed rate)、kはvの減衰率(kill rate)
dudt=Du*laplacian_u-u[i][j]*v[i][j]*v[i][j]+f*(1.0-u[i][j]);
dvdt=Dv*laplacian_v+u[i][j]*v[i][j]*v[i][j]-(f+k)*v[i][j];
//差分の更新
u1[i][j]=u[i][j]+dt*dudt;
v1[i][j]=v[i][j]+dt*dvdt;