我正在绘制此非线性一阶微分方程的图形:

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:函数调用的结果不是正确的浮点数组。

最佳答案

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


  func:可调用的(y,t0,…)
  计算y在t0的导数。


但是,您的函数diff返回一个由2个元素组成的列表,该列表除包含导数外还包含解决方案:

def diff(v, t):

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


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

def diff(v, t):

      return -3*v*v - 2

关于python - 使用scipy.integrate.odeint解决微分方程:“函数调用的结果不是正确的浮点数组。”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27494281/

10-12 23:52