使用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.
有人可以建议如何正确地进行此集成吗?感谢
答案 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))