存储未来集成的函数值

时间:2016-09-21 09:02:58

标签: python function store integrate

我有一个函数H(t)返回一个浮点数。然后我想用数字计算几个涉及这个函数的积分。但是,其中一个积分基本上调用了前一个积分,例如

from scipy.integrate import quad

def H(t):
    return t

def G1(t):
    return quad(lambda x: H(x)*H(t-x),0,1)[0]

def G2(t):
    return quad(lambda x: G1(x)*H(t-x),0,1)[0]

res = quad(G1,0,1) + quad(G2,0,1)

我需要为大量功能执行此操作(即使用G3,G4 ... Gn继续这样做),我的最终结果将取决于所有这些功能。因为为了执行quad(G1,0,1),我必须为t的许多值计算G1,是否可以存储这些计算值并在计算quad(G2,0,1)时使用它们?我也许可以尝试编写自己的简单集成函数,但是如何存储和重用这些值呢?

1 个答案:

答案 0 :(得分:0)

我猜它和lru_cache完全一样,但是既然我已经写了它,不妨分享一下:

def store_result(func):
    def remember(t):
        if t not in func.results:
            func.results[t]  = func(t)
        return func.results[t]
    setattr(func, 'results', {}) # make dictionary to store results
    return remember

这是修饰函数,用于修改函数以将结果存储到字典中,并在使用相同参数调用它们时检索它们。您可以根据自己的需要进行修改。

用法:

@store_result
def G1(t):
    return quad(lambda x: H(x)*H(t-x),0,1)[0]