python - 在 python 中使用 FIPY 计算联立偏微分方程
问题描述
我试图使用 fipy 解决 pde,因为我是新手;我无法调试代码中的错误。它没有给出任何空间图案,而只是在一段时间内给出不同的单色方块。我要解决的方程式是-
(∂u(x,y,t))/∂t=G_1 (u,v)+d_11 ∇^2 u+d_12 ∇^2 v 和
(∂v(x,y,t))/∂t=G_2 (u,v)+d_21 ∇^2 u+d_22 ∇^2 v
from fipy import *
nx=ny=200
dx=dy=0.25
L=dx*nx
dt=0.01
E=1.0
A=0.91881 #Alpha
B=0.0327 #Beta
D=0.05 #Delta
G=0.15 #Gamma
d11=0.1
d12=0.01
d21=0.5
d22=1.5
mesh =Grid2D(dx=dx,dy=dy,nx=nx,ny=ny)
u=CellVariable(name='u Variable',mesh=mesh) #pray
v=CellVariable(name='v Variable',mesh=mesh) #predator
u.setValue(GaussianNoiseVariable(mesh=mesh,mean=0.18,variance=0.01))
v.setValue(GaussianNoiseVariable(mesh=mesh,mean=0.6,variance=0.01))
eq_u=(TransientTerm(coeff=1,var=u)==u*(1-u)-(u*v*E)/(u+A*v)+ImplicitDiffusionTerm(coeff=d11,var=u)+ImplicitDiffusionTerm(coeff=d12,var=v))
eq_v=(TransientTerm(coeff=1,var=v)==B*v*(1-v)+(u*v*G)/(u+A*v)-D*v+ImplicitDiffusionTerm(coeff=d21,var=u)+ImplicitDiffusionTerm(coeff=d22,var=v))
#creating viewer
if __name__ == "__main__":
viewer_u=Viewer(vars=u,datamin=0.16,datamax=0.18)
viewer_u.plot()
viewer_v=Viewer(vars=v,datamin=0.0,datamax=0.4)
viewer_v.plot()
#solving
steps=250
for step in range(steps):
eq_u.solve(var=u,dt=dt)
eq_v.solve(var=v,dt=dt)
if __name__ == "__main__":
viewer_u.plot()
viewer_v.plot()
解决方案
- 这些方程是 ODE,而不是 PDE。FiPy 可能能够解决这些问题,但还有其他工具可以更好地解决 ODE,例如 SciPy
odeint
和scikits.odes
. - 我不确定您所说的“它没有给出任何图案,而只是在一段时间内给出不同的单色方块”是什么意思。随机初始条件似乎没有进化,但如果我增加到
dt
1.0,则V
进化到大约 0.5 的统一值。U
对我来说似乎没有进化,但这是某种显示故障。V
进化到 0.598 并U
进化到 0.179。空间中没有模式(如果这是您所期望的),因为这些方程没有空间依赖性;它们在时间上只有偏导数,因此绝对没有什么可以导致变量从一个单元格流向另一个单元格。 - 您似乎在这里逃脱了它,但是您的变量应该始终在同一个网格上定义,而不是
u_mesh
forU
和v_mesh
forV
。 - 无通量边界条件是 FiPy 中的默认值,因此没有理由指定
U.faceGrad.constrain
等。- 此外,这些方程中没有通量(因为它们是 ODE),因此设置边界通量没有意义。
- 通常我会建议让你的方程更隐含,将它们耦合在一起,然后扫描,但在这种情况下,这些似乎都没有对它们的演变产生太大影响。
推荐阅读
- php - TWIG 是否支持使用“...”标记的可变参数?
- google-apps-script - 在本地开发 gmail 插件的最佳开发设置?
- apache-spark - 更新表时 cassandra 错误的结果集
- c# - 使用 JSON.NET 将 JSON 对象显示到 DataGridView
- javascript - 全局变量未从函数内更新
- javascript - 存储 JavaScript 变量以便从 Nightwatch 测试中轻松访问的最佳位置?
- c# - ParallaxView 在 4 月更新后不起作用
- regex - 如何在Notepadd ++中删除除匹配格式之外的所有文本
- symfony - 从 composer.json [Symfony] 获取版本
- php - Sqlite 在 php 中没有返回正确的主键