存储函数值以供将来集成

问题描述 投票:0回答:1

我有一个返回浮点数的函数 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),我的最终结果将取决于所有函数。由于无论如何我都必须计算 t 的许多值的 G1 才能执行quad(G1,0,1),是否可以存储这些计算值并在计算quad(G2,0,1) 时使用它们?我也许可以尝试编写自己的简单集成函数,但是我将如何存储和重新使用这些值?

python function scipy numerical-integration
1个回答
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]
© www.soinside.com 2019 - 2024. All rights reserved.