使用scipy.integrate.quad时的ValueError

时间:2017-02-20 18:08:41

标签: python-3.x lambda scipy integral quad

使用ValueError进行整合时,我收到了scipy.integrate.quad。这是我的简化代码:

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.

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

1 个答案:

答案 0 :(得分:1)

我认为这段代码会将浮点数上的函数与数组混淆。 quad的函数参数需要接受一个float并返回一个float。在

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

p是一个浮点数(而不是p数组 - 让一个模块全局与参数同名的通常是一个坏主意)和{{1 }}和K是数组,这不是我们想要的(这是什么导致错误。)

我认为你只是在寻找

R

给了我

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))