Lambda 函数不按位置顺序接收参数

Lambda function doesn't take arguments in the order of their positions

我想将 a * b**2 与限制 a = [0, 2]b = [0, 1] 相结合。

from scipy import integrate

f1 = lambda a, b: a * b ** 2      
print((integrate.dblquad(f1, 0, 2, 0, 1))[0])

Output: 1.333...

预期结果:0.666...

出了什么问题?:正在使用限制 a = [0, 1] 和 b = [0, 2] 进行积分。

问题:为什么 lambda 不按位置顺序读取参数?

来自文档 (https://docs.scipy.org/doc/scipy/reference/tutorial/integrate.html) 顺序是首先给出积分中最后一个度量的范围,然后是第一个。这意味着:

from scipy.integrate import dblquad

print(dblquad(lambda a, b: a * b ** 2, 0, 2, lambda b: 0, lambda b: 1)[0])
print(dblquad(lambda a, b: a * b ** 2, 0, 1, lambda a: 0, lambda a: 2)[0])

评估为:

1.3333333333333335
0.6666666666666667

因此,您需要翻转顺序才能获得所需的结果。