我目前正在学习如何使用 FiPy,并最终想用它来解决一些生物学问题。我一直在尝试实施以下描述真菌菌丝生长的 PDE 系统:
我可以毫无问题地实现这个系统,只要我忽略了第四个方程 dsi/dt 中si 随时间的变化取决于p 在空间 abs(dp/dx) 上的绝对变化。这是我没有 abs() 的代码:
现在,我试着简单地写
eqsi = (TransientTerm(var=si)== DiffusionTerm(var=si,coeff=Di*m)- DiffusionTerm(var=p,coeff=Da*m*si) + ImplicitSourceTerm(var=si,coeff=c1*m*se) - ImplicitSourceTerm(var=si,coeff=c2*v*p) - abs(ConvectionTerm(var=p,coeff=[[c4*Da]]*(m*si))))
这(预期)给出了一个错误:“abs()的错误操作数类型:'PowerLawConvectionTerm'”
我试图通过添加另一个 CellVariable dpdx 来解决这个问题:
dpdx= CellVariable(name="dpdx",mesh=mesh,hasOld=True,value=0.)
eqdpdx= (dpdx == ConvectionTerm(var=p,coeff=[[1]]))
eqsi = (TransientTerm(var=si)== DiffusionTerm(var=si,coeff=Di*m)- DiffusionTerm(var=p,coeff=Da*m*si) + ImplicitSourceTerm(var=si,coeff=c1*m*se) - ImplicitSourceTerm(var=si,coeff=c2*v*p) - abs(dpdx)*c4*Da*m*si)
然后给出错误“ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()”,这可能是由于 eqdpdx 不是导函数这一事实造成的?
我的问题是:是否可以使用 ConvectionTerm 执行数学运算?我能以某种方式表达 p 的绝对变化吗?而且,我如何表达像 eqdpdx (或任何动态参数)这样随空间变化的非导数函数?我查看了 FiPy 手册但找不到解决方案 - 如果我的问题微不足道或已在其他地方得到解答,我深表歉意。
回首忆惘然
相关分类