我有 其中 是整数。换句话说,我计算函数的余弦傅里叶系数,它在区间上是实数且连续的。我需要计算大量的大值。目前我只是这样做:
iint = array([ integrate.quad(lambda x: f(x)*cos(n*pi*x), 0, 1, limit=1000)[0] for n in range(0,nlim) ])
其中通常是的数量级。我觉得这不是最好的方法。如何让我的计算更快?
我有 其中 是整数。换句话说,我计算函数的余弦傅里叶系数,它在区间上是实数且连续的。我需要计算大量的大值。目前我只是这样做:
iint = array([ integrate.quad(lambda x: f(x)*cos(n*pi*x), 0, 1, limit=1000)[0] for n in range(0,nlim) ])
其中通常是的数量级。我觉得这不是最好的方法。如何让我的计算更快?
这是(复值)傅里叶变换的一部分,如果要计算零之间的至少一个重要部分的积分,则(可证明)没有比快速傅里叶变换 (FFT) 更有效的方法以及您关心的最大频率。
换句话说,虽然您的直觉可能会告诉您在大量点上评估函数可能是有效的,但在这种情况下直觉是错误的。
这和f(x)的傅里叶变换的实部不一样吗
如果很不错,然后你可以近似使用一系列分段多项式并在结果区间上精确积分。这可能比使用 FFT 便宜得多。这也适用于近似值通过您可以轻松知道或确定每个区间中的确切反导数的任何函数。如果是一个黑匣子,那么您将使用此方法遇到更多麻烦。