0

我正在尝试评估一个双积分,其中内部积分的极限是可变的并且取决于外部积分。来自 Matlab 背景,使用符号积分很容易,但我不知道如何在 Python 中以有效的方式计算它。我阅读 scipy了文件,但没有得到任何帮助。这种积分的一个例子是

方程

任何有关相同的帮助将不胜感激。

更新:我正在寻找该问题的数值解决方案。非常感谢您的回答和帮助。他们完全有道理。我有一个更新的问题。我想评估以下积分,它是上面的更新版本。提前非常感谢。

在此处输入图像描述

4

1 回答 1

3

要计算双积分,您可以使用函数scipy.integrate.dblquad。或者您可以使用函数scipy.integrate.quad两次。

示例积分可以按如下方式完成:

import math
from scipy.integrate import dblquad, quad
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)))


def h1(z):
    return integral_of_f(z) * g(z)


def h2(z):
    return (integral_of_f(z) ** 2) * g(z)


def integral_of_f(z):
    return quad(f, 0, 2 * z)[0]  # here abserr is discarded


if __name__ == '__main__':
    a, q, s = 0, 2, 3  # set the constants

    result, abserr = dblquad(h, 0, 60, lambda z: 0, lambda z: 2 * z)
    print(f'result: {result}, abserr: {abserr}')

    result1 = quad(h1, 0, 60)[0]  # abserr here for result1 is not valid since abserr is already discarded in the function integral_of_f
    print(f'result1: {result1}')

    result2 = quad(h2, 0, 60)[0]  # abserr here for result2 is not valid too for the same reason
    print(f'result2: {result2}')

哪个打印

result: -0.21705286423629183, abserr: 1.4361242750875712e-08
result1: -0.21705286423678177
result2: 0.013105371081178754

可以看到result使用计算的dblquadresult1使用quad两次计算的 几乎是相同的值,因为它们计算了相同的积分。

result2用于更新的问题。

于 2020-05-15T23:57:22.293 回答