使用scipy.integrate.odeint()计算衰减

时间:2016-06-17 17:07:39

标签: python scipy

我试图用scipy.integrate.odeint()计算一些物种的衰变。其中一个衰减系数非常大,这似乎导致了一个问题,我不知道为什么或如何解决它。这是我的代码:

from scipy.integrate import odeint
import numpy as np
import matplotlib.pyplot as plt

def decay(init,t):
    a,b,c,d = init
    f0 = - 6*a
    f1 = 3 * a - 1e12*b
    f2 = 3 * a
    f3 = 1e12 * b
    return [f0,f1,f2,f3]

if __name__ == '__main__':
    init = [1,0,0,0]
    time = np.linspace(0, 1e12, 100001)
    soln  = odeint(decay, init ,time)

这给了我以下错误:

lsoda--  at t (=r1) and step size h (=r2), the    
       corrector convergence failed repeatedly       
       or with abs(h) = hmin   ls
      in above,  r1 =  0.0000000000000D+00   r2 =  0.1552206225945D-09
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scipy/integrate/odepack.py:218: ODEintWarning: Repeated convergence failures (perhaps bad Jacobian or tolerances). Run with full_output = 1 to get quantitative information.
  warnings.warn(warning_msg, ODEintWarning)
Jakes-MacBook-Pro:Radiation_Calculator jakehuneau$ python tester.py
 lsoda--  at t (=r1) and step size h (=r2), the    
       corrector convergence failed repeatedly       
       or with abs(h) = hmin   ls
      in above,  r1 =  0.0000000000000D+00   r2 =  0.1552206312178D-09
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scipy/integrate/odepack.py:218: ODEintWarning: Repeated convergence failures (perhaps bad Jacobian or tolerances). Run with full_output = 1 to get quantitative information.
  warnings.warn(warning_msg, ODEintWarning)

如果衰减函数中b上的系数是1e10而不是1e12,则代码确实有效。

0 个答案:

没有答案