绘制随时间变化的二维扩散方程

时间:2018-12-10 18:02:32

标签: python numpy matplotlib plot numerical-methods

因此,基本上,我在python中创建了一个图,该图对一个岛上的两个相互作用的种群进行了建模,并显示了使用扩散方程对一维种群的移动和变化进行建模的方法,并且我正在尝试对其进行修改因此我改为使用二维图,因此它考虑了该物种在岛上的x和y位置。

抱歉,代码很长,虽然大多数代码只是在定义参数-我不太确定如何创建一个二维图,该图在每个位置都具有人口密度,这是我在下面的尝试,但情节根本不正确。我认为我的数值解应该是正确的,我假设这是我的初始/边界条件,以及如何为不正确的概率分布设置数组,但是我不确定如何更改它。例如,我遇到的问题之一是它在x轴上具有Y位置-我该如何解决?

r1=0.1 # growth rate B
r2=0.3 # growth rate M
KB = 20 # carrying capacity B
KM = 6000 # carrying capacity M
x=np.arange(0,70) # distance from the coast (100m)
y=np.arange(0,90) # distance from the coast
dx=1 # change in x position
dy=1 # change in y position
dt=1 # time step
m=71 # number of x steps
o=91 # number of y steps
n=21 # time
alpha =  0.00002 # predation rate
beta = 0 # growth rate from predation (assumed to be zero)

B=np.zeros(shape=(m,o,n)) # species B 
M=np.zeros(shape=(m,o,n)) # species M
D=0.35 # diffusivity of B
D2=0.05 # diffusivity of M
Alpha=(D*dt)/(dx*dx)
Beta=(D*dt)/(dy*dy) 
Alpha2=(D2*dt)/(dx*dx)
Beta2 = (D2*dt)/(dy*dy)

M[0,:,0]=0 #initial conditions
M[m-1,:,0]=0
M[:,0,0]=0
M[:,m-1,0]=0
B[1:26,:,0]=0.96
B[26:44,:,0]=4.6
B[44:m-1,:,0]=0.96
B[:,1:26,0]=0.96
B[:,26:44,0]=4.6
B[:,44:m-1,0]=0.96
M[1:26,:,0]=2500
M[26:44,:,0]=1000
M[44:m-1,:,0]=2500
M[:,1:26,0]=2500
M[:,26:44,0]=1000
M[:,44:m-1,0]=2500
for k in range(0,n-1): # loop for time
    B[0,:,k+1]=B[1,:,k+1] # boundary conditions
    B[m-1,:,k+1]=B[m-2,:,k+1]
    M[0,:,k+1]=0
    M[m-1,:,k+1]=0
    B[:,0,k+1]=B[:,1,k+1]
    B[:,m-1,k+1]=B[:,m-2,k+1]
    M[:,0,k+1]=0
    M[:,m-1,k+1]=0
    for i in range(1,m-1): # loop for x
        for j in range(1,o-1): # loop for y
            Bdxx=(-2*Alpha)*B[i,j,k]+Alpha*B[i+1,j,k]+Alpha*B[i-1,j,k]
            Bdyy=(-2*Beta)*B[i,j,k]+Beta*B[i,j+1,k]+Beta*B[i,j-1,k]
            B[i,j,k+1]=B[i,j,k]+Bdxx+Bdyy+r1*B[i,j,k]*(1-B[i,j,k]/KB)-alpha*M[i,j,k]*B[i,j,k] # numerical solution for B 
            Mdxx=(-2*Alpha2)*M[i,j,k]+Alpha2*M[i+1,j,k]+Alpha2*M[i-1,j,k]
            Mdyy=(-2*Beta2)*M[i,j,k]+Beta2*M[i,j+1,k]+Beta2*M[i,j-1,k]
            M[i,j,k+1]=M[i,j,k]+Mdxx+Mdyy+r2*M[i,j,k]*(1-M[i,j,k]/KM)+beta*M[i,j,k]*B[i,j,k] # numerical solution for M


plt.pcolormesh(B[:,:,n-1]) 
plt.colorbar()
plt.xlabel('X Position')
plt.ylabel('Y Position')

非常感谢您的帮助!

编辑:我已经意识到部分问题是y坐标的初始条件不正确

0 个答案:

没有答案