我有一个函数,想要得到它的积分函数,类似于这样:
那就是说,我需要在多个点获取值,而不是在点x
上获取单个积分值。
例如:
假设我想要在 (-20,20) 范围内获取值。
def f(x):
return x**2
x_vals = np.arange(-20, 21, 1)
y_vals =[integrate.nquad(f, [[0, x_val]]) for x_val in x_vals ]
plt.plot(x_vals, y_vals,'-', color = 'r')
问题
在我提供的示例代码中,对于每个点,从头开始做积分。在我的实际代码中,f(x)
相当复杂,而且是多次积分,因此运行时间非常慢(Scipy: speed up integration when doing it for the whole surface?)。
我想知道是否有任何有效的方法可以在给定范围内高效地生成Phi(x)
。
我的想法:
点Phi(20)
处的积分值是从Phi(19)
计算得出的,Phi(19)
是从Phi(18)
等依此类推。因此,当我们得到Phi(20)
时,实际上我们也得到了一系列的(-20,-19,-18,-17 ... 18,19,20)
。只是我们没有保存这个值。
我在想,是否有可能为一个集成函数创建“保存点”,这样当它经过一个“保存点”时,值就会被保存并继续到下一个点。因此,通过单一的处理过程可以得到20
的值,同时也可以得到(-20,-19,-18,-17 ... 18,19,20)
的值。