如何数值评估这个双积分?

计算科学 Python 数字 scipy 一体化
2021-12-04 07:14:18

我想评估以下积分:

060 (02z0.5t(erf(ta)1)J0(qt)dt)2exp((za)22s2)dz

其中 a、q 和 s 是常数。如果没有第一个积分之外的正方形,可以使用dblquadfrom轻松评估scipy

import math
from scipy.integrate import dblquad
from scipy.special import erf, jv


def h(t, z):
    return f(t) * g(z)


def f(t):
    return 0.5 * t * (erf(t - a) - 1) * jv(0, q * t)


def g(z):
    return math.exp(-((z - a) ** 2)/(2 * (s ** 2)))


if __name__ == '__main__':
    a, q, s = 0, 1, 2  # set the constants
    result, abserr = dblquad(h, 0, 60, lambda z: 0, lambda z: 2 * z)
    print(f'result: {result}, abserr: {abserr}')

我查看了积分的平方,如图所示,积分平方等价于二重积分:

(abf(x)dx)2=ababf(x)f(y)dxdy

这使问题变得更加复杂,因为现在我必须评估三重积分,这会使评估速度变慢。有没有更好的方法来解决这个问题?任何帮助将不胜感激。

0个回答
没有发现任何回复~