使用scipy.integrate.odeint求解微分方程:“函数调用的结果不是一个正确的浮点数组。”

时间:2014-12-15 22:24:33

标签: python scipy differential-equations nonlinear-functions

我正在绘制这个非线性一阶微分方程的图表:

dv/dt + 3 v**2 + 2 = 0

以下是代码:

from scipy.integrate import odeint

from matplotlib import pyplot as plt

import numpy as np

def diff(v, t):

      return [v, -3*v*v - 2]

t = np.arange(-1,1,0.01)

v0 = 1

f = odeint(diff, v0, t)

plt.figure(figsize=(5,5))

plt.plot(t, f)

plt.show()

然而,这不起作用:

  

odepack.error:函数调用的结果不是正确的浮点数组。

1 个答案:

答案 0 :(得分:2)

odeint routine期望第一个参数仅计算导数:

  

func callable(y,t0,...)
  在t0计算y的导数。

但是,除了衍生之外,您的函数diff会返回包含解法的2元素列表

def diff(v, t):

      return [v, -3*v*v - 2]

要解决此问题,您只需从返回值中删除v,并避免将其包装在列表中:

def diff(v, t):

      return -3*v*v - 2