使用 scipy.integrate.quad 时出现 ValueError

ValueError when using scipy.integrate.quad

我在使用 scipy.integrate.quad 集成时收到 ValueError。这是我的简化代码:

import numpy as np
import scipy.integrate as integrate
p = np.arange(0,1,1/1000)
h = lambda p: p**2/2+p*(1-p)
Kl = lambda p: h(p) + 0.02
K = Kl(p)
R = 0.5*h(p) + 0.5*h(1)
Vl = lambda p: np.minimum.reduce([p, K, R])
integrate.quad(Vl, 0, 1)[0]

最后一行给出了异常:

ValueError: setting an array element with a sequence.

有人可以建议如何正确进行此集成吗?谢谢

我认为这段代码混淆了浮点数上的函数和数组。 quad 的函数参数需要接受一个浮点数和 return 一个浮点数。在

Vl = lambda p: np.minimum.reduce([p, K, R])

p 是一个浮点数(并且不是 p 数组——拥有一个与参数同名的全局模块通常是个坏主意)并且 KR 是数组,这不是我们想要的(这就是抛出错误的原因。)

我想你只是在寻找

def h(p):
    return p**2/2+p*(1-p)

def K(p):
    return h(p) + 0.02

def R(p):
    return 0.5*h(p) + 0.5*h(1)

def Vl(p):
    return min(p, K(p), R(p))

这给了我

In [177]: integrate.quad(Vl, 0, 1.0)
Out[177]: (0.34689543041336846, 4.8736376714649885e-09)