python - 高斯拉盖尔积分如何适用于大范围?

标签 python numpy scipy integration gauss

我想知道高斯拉盖尔如何适用于大限值。例如, 我在两个维度上都有一个从 (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?我从理论上看到了定义,但我没有看到更高的权重和横坐标是如何捕获的。

谢谢

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

最佳答案

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

n + (n-1) 平方根

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

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

调整被积函数的支持

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

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

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

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

关于python - 高斯拉盖尔积分如何适用于大范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41832871/

相关文章:

python - 如何并行化 scipy 稀疏矩阵乘法

python - 如何修复 Flask 中的 "The method is not allowed for the requested URL"

python - 这是验证 Django 模型字段的方法吗?

python - 如何在 MATLAB 中将定点数(Q 格式)转换为 float

python - 将 numpy.datetime64 转换为 int 时出错

python - 将稀疏矩阵转储到文件中

python - 显示维恩图输出

python - 无法为 AWS Sagemaker 实例安装 toc2 笔记本扩展(生命周期配置)

python - 为什么转置一个 numpy 数组将它旋转 90 度?

python - 是否有 python (scipy) 函数来确定获得目标功率所需的参数?