python - 改变 t 间隔时,odeint 的行为有所不同
问题描述
我有这个方程组:
def Diffeq(v,t, lam, gam,a):
c=[i for i in range(0,len(v))]
vdot = np.empty_like(v)
for i in range(0,len(v)):
if i == 0:
vdot[0] = gam*c[1]*v[1]
elif i == (len(v)-1):
vdot[i] = lam*a[i-1]*v[i-1] - (lam*a[i]+gam*c[i])*v[i]
else:
vdot[i]= lam*a[i-1]*v[i-1] - (lam*a[i]+gam*c[i])*v[i]+
gam*c[i+1]*v[i+1]
return vdot
其中 lambda、gamma 和 a 是以下一组参数 (N=1000):
a = [6*i*(N-i)/(N-1.0) for i in range (0,N+1)]
gamma = 1
lam = 2
如果我打电话:
t = np.linspace(0,3,100)
incond=np.array([0.0]*(N+1) #from 0 to 1000 included
incond[i0] =1.0
y = odeint(Diffeq, incond, t, args=(lam,gamma,a))
我尝试绘制我的 y 的期望值:
finalv = np.array([0.0]*100)
for time in range(0,100):
for k in range(0,N+1):
finalv[time] = finalv[time] + (k)*y[time][k]
如果我想改变我的 t 间隔,到
t = linspace(0,50,100)
有时,如果我稍微使用 a 的值,我会收到以下运行时警告:
/home/myub/Desktop/Odeintegration.py:79: RuntimeWarning: overflow
encountered in double_scalars
解决方案
推荐阅读
- python-3.x - Python - 嵌套字典 - 提取值
- r - 使用 R 循环中变量的 CHIRPS 数据
- java - 为什么我的数组由不打印到控制台的方法返回?
- asp.net-core - 生产环境中的 Identityserve 4:“IDX10501:签名验证失败。无法匹配密钥”
- c# - 字典中两个道具的比较
- react-native - 为什么我突然有了 webpack metro bundler 而不是普通的 metro bundler?
- intellij-idea - Intellij 错误 - 测试框架意外退出 intellij
- python - Jupyter notebook 消耗硬盘内存
- python - 为什么 python 中的 len() 内置方法将对象作为参数,而不是使用带有点运算符的对象来调用?
- aws-lambda - 在 Elastic Beanstalk 与无服务器 Lambda 中运行 Razor 页面站点