3

我想知道高斯拉盖尔如何在大范围内工作。例如,我有一个从 (0, +inf) 开始的二维函数。当我在 python 中使用 gauss 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,该怎么办?我从理论中看到了定义,但我看不到如何捕获更高的权重和横坐标。

谢谢

编辑:不可能进一步减少我的功能。被积函数的不同部分是用数值计算的,所以我没有任何解析表达式。我只能说函数是平滑的并且具有正弦曲线的行为。

4

1 回答 1

0

如果我没看错话,第 n 个拉盖尔多项式的根由

n + (n-1) sqrt(n)

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

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

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

在您的情况下,您可能想要使用相当大的 lambda。

更具体地说,尝试将最内层循环中的第一行替换为

  fval = lam*lam * integrand(lam*kza, lam*kta)
于 2017-01-24T16:43:19.063 回答