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