gauss-laguerre积分如何适用于大的极限



我想知道gauss-laguerre是如何在大极限下工作的。例如我有一个从(0,+inf)开始的二维函数。当我使用高斯在python中,laguerre通过用权重和横坐标对函数进行采样并将它们相加,我没有得到与我使用的类似的东西,比如dblquad。下面是用于集成的示例代码。lgw输出权重和横坐标,然后通过使用两个for循环在二重积分中使用。我看不出像x,y=1e8,1e8这样的采样点是如何被这个捕获的。增加n不会得到高横坐标(至少不是要求的那么高)。

kzas,kzws = lgw(n)
for kta,ktw, in zip(kzas,kzws):
for kza,kzw in zip(kzas,kzws):
fval = integrand(kza,kta)
wghtx = kzw*numpy.exp(kza)
wghty = ktw*numpy.exp(kta)
integral += wghtx*wghty*fval

有人能解释一下如何捕捉更高的采样点吗?我没有正确使用正交函数吗?我可以集成极限很小的函数,比如1e2左右。如果极限很高,比如1e15,该怎么办?我从理论上看到了定义,但我看不出如何捕捉更高的权重和横坐标。

感谢

编辑:不可能再减少我的功能了。被积函数的不同部分是用数字计算的,所以我没有任何解析表达式。我所能说的是,函数是光滑的,具有正弦曲线的行为。

如果我读对了,第n个拉盖尔多项式的根受约束

n+(n-1)sqrt(n)

这意味着你必须达到极高的程度才能从被积函数中更遥远的点进行采样。

我想,如果被积函数振荡不太快,你可以尝试重新缩放轴。更具体地说,您可以使用调整被积函数的支持

\λ\int_0^\infty f(\lambda x)dx=\int_0 ^\infity f(x)dx

在您的情况下,您可能希望使用相当大的\lambda。

更具体地说,试着用替换最内层循环中的第一行

fval = lam*lam * integrand(lam*kza, lam*kta)

相关内容

  • 没有找到相关文章

最新更新