python - 递归整合

标签 python function recursion

这是我正在处理的实际问题的简化版本。

假设我们有一系列(数学)函数,f_0, f_1, f_2, ..., 这样 enter image description here

我们固定一个函数 f_0,比如说,f_0(x)=x。在这个简单的例子中,f_n(x) = 1/((n+1)!) x^{n+1}。是否有一种优雅而有效的递归编程方式,以便 Python 返回给定任意函数 f_0 的函数 f_n?

我开始尝试返回 f_2,但这已经失败了:

from scipy.integrate import quad

f_0=lambda x: x
f_1=lambda x: quad(f_0,0,x)
f_2=lambda x: quad(f_1,0,x)

返回错误

error: Supplied function does not return a valid float. 

在尝试评估之后f_2(3).

最佳答案

链接数字积分没有错。问题是 quad 返回的内容:

Returns:
y : float The integral of func from a to b.

abserr : float An estimate of the absolute error in the result.

所以你得到两个返回值,但只有第一个是有趣的(除非你想在所有积分上传播误差,但我不知道该怎么做)。第二个积分出错是因为该函数返回一个包含两个值的元组,而不是仅返回一个标量。

下面的小修改将通过选择 quad 的第一个返回值来修复错误:

from scipy.integrate import quad

f_0=lambda x: x
f_1=lambda x: quad(f_0,0,x)[0]
f_2=lambda x: quad(f_1,0,x)[0]

为了完整起见,这里给出一个迭代n次的递归定义:

def integrate_a_lot(f, n):
    for _ in range(n):
        f = lambda x, f=f: quad(f, 0, x)[0]
    return f

f_2 = integrate_a_lot(f_0, 2)
f_42 = integrate_a_lot(f_0, 42)

关于python - 递归整合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43981121/

相关文章:

python - 使用 64 位 float 而不是 32 位 float 的原因

python - django 重定向带有参数的 url

python - 如何使用 Python Tornado 构建线程安全的请求处理程序

python - django安装问题[python]

java - 递归地将给定字符串转换为驼峰式大小写

python - 运行递归二进制搜索算法时出现段错误

javascript - 递归返回函数调用——理论re return语句

mysql - 创建MySQL函数语句

php - 测试参数是否存在于函数中

javascript - 在函数内声明变量 - 循环