将参数传递给mpmath四重积分

2 投票
2 回答
2348 浏览
提问于 2025-04-16 19:03

我正在整合一些比较复杂的函数,而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), ...)

撰写回答