首页 > 解决方案 > 改变 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

标签: pythonplotodeodeint

解决方案


推荐阅读