将参数传递给mpmath四重积分
我正在整合一些比较复杂的函数,而scipy.integrate.quad这个工具处理起来不是很好。我原本打算用mpmath.quad和tanh-sinh方法,但我需要给正在计算的函数传递一些参数,像这样:
mpmath.quad(f,[0,mpmath.pi],method='tanh-sinh',args=(arg_1, arg_2))
因为f是这样定义的:
f(x,arg_1, arg_2)
在文档里没找到类似的内容。有什么建议吗?
谢谢!
2 个回答
1
这里有个小提示,tanh-sinh 积分方法也可以不使用 mpmath,直接通过 tanh_sinh 这个库来实现(这是我开发的一个包)。如果你的函数有额外的参数,你可以像下面这样把函数包装起来:
import tanh_sinh
import numpy
def fun(x, a):
return a * numpy.exp(x) * numpy.cos(x)
val, error_estimate = tanh_sinh.integrate(
lambda x: fun(x, 1),
0,
numpy.pi / 2,
1.0e-14,
# Optional: Specify first and second derivative for better error estimation
# f_derivatives={
# 1: lambda x: numpy.exp(x) * (numpy.cos(x) - numpy.sin(x)),
# 2: lambda x: -2 * numpy.exp(x) * numpy.sin(x),
# },
)
print(val, error_estimate)
我觉得这种方法比直接传递参数更好,因为它更清晰明了。
3
使用 lambda 表达式:
import mpmath
arg_1 = 1
arg_2 = 9
print mpmath.quad(lambda x: f(x, arg_1, arg_2), ...)