使用 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
数组——拥有一个与参数同名的全局模块通常是个坏主意)并且 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))
这给了我
In [177]: integrate.quad(Vl, 0, 1.0)
Out[177]: (0.34689543041336846, 4.8736376714649885e-09)
我在使用 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
数组——拥有一个与参数同名的全局模块通常是个坏主意)并且 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))
这给了我
In [177]: integrate.quad(Vl, 0, 1.0)
Out[177]: (0.34689543041336846, 4.8736376714649885e-09)