是否转换


15

我曾经听说过,当人们试图对数字进行形式积分时

0f(x)J0(x)dx

如果平滑且行为良好(例如,本身本身不是高度振荡的,非奇异的等),则将其重写为f(x)

1π0π0f(x)cos(xsinθ)dxdθ

并首先数值计算内部积分。我看不出有什么理由可以期望它能起作用,但是数值方法的准确性很少是显而易见的。

当然,我知道执行此操作的最佳方法是使用针对像这样的振荡积分优化的方法,但是出于好奇的缘故,假设我将自己限制为使用某些正交规则。任何人都可以确认或驳斥进行这种转换会提高积分的准确性吗?和/或向我指出解释该问题的消息来源?


1
积分 ......这是贝塞尔函数的积分定义之一。0θπ
David Z

4
所以,你的问题是:鉴于通用 -点求积公式Q ñ [ ][ 0 Q ñ π [ ][ 0 π ],是Q ñ 中号 [ ˚FNQN[][0,)QπN[][0,π]QNM[fJ0]QπM[QN[f(x)cos(xsinθ)]]

@StefanoM是的,是的。
David Z

FWIW是评估零阶贝塞尔函数的最有效方法之一是梯形法则,众所周知,梯形法则可以在一个周期内积分周期被积数时给出非常准确的结果(甚至比通常的标准高斯求积还要好)。所以:这可能有帮助,但可能没有帮助。
JM

Answers:


3

我认为这没有任何区别。您必须选择足够高的正交来积分θ 这样就等于贝塞尔函数 Ĵ0。在下面的示例中,我选择了20阶,但对于集成的确切功能和区间,您始终必须进行收敛。然后我确实与ñ,积分高斯积分的阶数 X。我选择了FX=Ë-XX2 并使用域名 [0X最大值], 你可以改变 X最大值下面。我有:

 n      direct         rewritten
 1  0.770878284949  0.770878284949
 2  0.304480978430  0.304480978430
 3  0.356922151260  0.356922151260
 4  0.362576361509  0.362576361509
 5  0.362316789057  0.362316789057
 6  0.362314010897  0.362314010897
 7  0.362314071949  0.362314071949
 8  0.362314072182  0.362314072182
 9  0.362314072179  0.362314072179
10  0.362314072179  0.362314072179

如您所见, ñ=9 两个积分都完全收敛到12个有效数字。

这是代码:

from scipy.integrate import fixed_quad
from scipy.special import jn
from numpy import exp, pi, sin, cos, array

def gauss(f, a, b, n):
    """Gauss quadrature"""
    return fixed_quad(f, a, b, n=n)[0]

def f(x):
    """Function f(x) to integrate"""
    return exp(-x) * x**2

xmax = 3.

print " n      direct         rewritten"
for n in range(1, 20):
    def inner(theta_array):
        return array([gauss(lambda x: f(x) * cos(x*sin(theta)), 0, xmax, n)
            for theta in theta_array])
    direct = gauss(lambda x: f(x) * jn(0, x), 0, xmax, n)
    rewritten = gauss(inner, 0, pi, 20) / pi
    print "%2d  %.12f  %.12f" % (n, direct, rewritten)

您可以自己玩这个游戏,只需进行更改xmax,也许您需要拆分间隔[0]融入元素并逐元素整合。您也可以更改功能f(x)。确保始终对积分进行收敛rewritten = gauss(inner, 0, pi, 20) / pi,即从某个低阶开始并不断增加,直到打印结果停止变化。


我怀疑您是对的,我自己的测试也显示了类似的结果。
David Z
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.