微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PyDSTool:非负约束使用 xdomain不起作用

如何解决PyDSTool:非负约束使用 xdomain不起作用

我正在使用 PyDSTool 创建一个“SIRV”模型。对于此模型,变量“S”、“I”、“R”或“V”都不能低于 0 或高于预定义值(称为“N”)。我已经看到 PyDSTool 有一个内置函数“xdomain”,它声称能够实现这些限制。但是,很像 this question,它不起作用。尽管代码运行,但它就好像它被当作它不存在一样对待。我附上了我的相关代码

#---Import---#
import PyDSTool as dst
import numpy as np
import scipy as sp
import matplotlib.pyplot as plt

#---SIRV Code---#
icdict = {'s': 0.999,'i': 0.001,'r': 0,'v': 0} 
pardict = {'beta': 2.4/14,'D': 14,'L': 5,'N': 1,'rho': 0}

ds_rhs = '-beta * (i/N) * s - rho'
di_rhs = 'beta * (i/N) * s - ((1/D) * i)'
dr_rhs = '(1/D) * i'
dv_rhs = 'rho'

vardict = {'s': ds_rhs,'i': di_rhs,'r': dr_rhs,'v': dv_rhs} 

DSargs = dst.args() 
DSargs.name = 'SIRV'
DSargs.ics = icdict 
DSargs.pars = pardict
DSargs.tdata = [0,20] 
DSargs.varspecs = vardict
#DSargs.xdomain = {'s': [0,5000000],'i': [0,'r': [0,'v': [0,5000000]}

DS = dst.Generator.Vode_ODEsystem(DSargs)

DS.set(pars={'beta': 5/14,'N': 5000000,'rho': 9000},ics={'s': 4999999,'i': 1},xdomain = {'s': [0,5000000]},#has no effect
       tdata = [0,400])

traj = DS.compute('demo')
pts = traj.sample()

#---Plotting---#
plt.plot(pts['t'],pts['s'],label='S')
plt.plot(pts['t'],pts['i'],label='I')
plt.plot(pts['t'],pts['r'],label='R')
plt.plot(pts['t'],pts['v'],label='V')
plt.legend()
plt.xlabel('t')
plt.show()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。