存储功能值以供将来集成
store function values for future integration
我有一个返回浮点数的函数 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]
我有一个返回浮点数的函数 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]