Python 高斯-拉盖尔积分如何适用于大极限?

Python 高斯-拉盖尔积分如何适用于大极限?,python,numpy,scipy,integration,gauss,Python,Numpy,Scipy,Integration,Gauss,我想知道gauss-laguerre在大极限下是如何工作的。例如 我有一个从(0,+inf)开始的二维函数。当我使用高斯时 在python中,拉盖尔通过使用权重和横坐标对函数进行采样,并将它们相加,我没有得到与使用dblquad得到的结果相近的结果。下面是用于集成的示例代码。lgw输出权重和横坐标,然后使用两个for循环在二重积分中使用。 我看不出像x,y=1e8,1e8这样的采样点是如何被这种方法捕获的。增加n不会产生高横坐标(至少不是要求的很高) 有人能解释一下如何获取较高的采样点吗?我没有

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

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

谢谢

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

如果我读得正确,第n个拉盖尔多项式的根是有界的

n+(n-1)sqrt(n)

这意味着您必须达到疯狂的高度,才能从被积函数中较远的点进行采样

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

\lambda\int\u 0^\infty f(\lambda x)dx=\int\u 0^\infty f(x)dx

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

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

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

当参数接近
+inf
时,函数的行为是什么?我怀疑,如果你只是采样“足够远”的点,你永远不会得到一个好的数值近似值,而函数的行为超出了“足够远”的范围,在某种程度上是不平凡的。你能定义一个半径,在这里你应用数值方法,并用解析的方法估计其余的吗?@9000该函数即使对于像1e10这样的值也是非零的,并且只有在5e10之后才变为零。在这两者之间,它以正弦方式在0和1之间变化(不总是,但我可以说它有这种变化)。它的函数值不是很高,也没有任何奇点。该方法的主要目的是方便地积分极限为(0,inf)的函数。有一个高度要求的限制是违背目的的。特别是当内置程序无法获得如此高的学位时。我并不是说它无法计算。应该有一种方法使它在这样一个极限下工作,因为人们已经使用这种方法很长时间了。好吧,对于这种不适当的积分来说,首先,被积函数最终必须衰减得足够快。我必须承认,对于高斯传奇中的特殊长度尺度从何而来,我没有直觉,但它们就是这样。它们似乎不适合被积函数的规模。但是正如我所说的,你可以尝试使用c int_0^infty f(cx)dx=int_0^infty f(x)dx来重新缩放。如果你选择足够大的c,你可以把被积函数的支持带到一个可管理的范围内。我试过你最后一个建议使用lambda。我得到的值比不使用lambda时大,但仍然低于使用dblquad时得到的值。它仍然可以是正确的,因为dblquad的计算可能是错误的。如果我尝试通过增加lambda来处理lambda,我会得到指数(nan等)中的溢出错误。所以在max,我可以为lambda去1e9。如果我使用较低的lambda值,我会得到非常小的被积函数值。我想知道是否有其他方法可以转换这样的积分。谢谢你的建议。你从哪里弄来的溢油?在被积函数中?只是为了确定:你必须在第一排伸展kza和kta,但在第二排和第三排不行。是的,我犯了那个错误,但很快就改正了。我得到被积函数本身内部的溢出。
  fval = lam*lam * integrand(lam*kza, lam*kta)