我有一个返回浮点数的函数 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) 时使用它们?我也许可以尝试编写自己的简单集成函数,但是我将如何存储和重新使用这些值?
我猜它和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]