积分函数与内部累积分布函数

计算科学 scipy 正交
2021-12-13 04:30:10

我正在尝试集成一个func在我的代码中定义的函数,其中包含一个累积分布函数:

from scipy.stats import norm
from scipy.integrate import quad
import math
import numpy as np


def func(v, r):
    return (1 - norm.cdf(r / math.sqrt(v)))

print(quad(lambda x: func(x, 1) , 0, np.inf))

我得到这个警告:

IntegrationWarning:算法不收敛。在外推表中检测到舍入误差。假设无法达到要求的容差,并且返回的结果(如果 full_output = 1)是可以获得的最佳结果。

结果是:

(1465037253.745132, 2713580385.6787577)

我认为这个结果是错误的,但我不知道在我的代码中要更改什么。我试图排除点 0,但这没有帮助。

我还尝试更改限制以尝试不是从 0 开始,而是从 r 开始(所以在附加示例中从 1 开始)(这些是我需要检查的不同结果)并且有不同的错误:

积分警告:积分可能是发散的,或缓慢收敛的。

而且我认为获得的结果是错误的。你有什么建议吗?

编辑:

我试图计算这个:

01G(r/v)dv

其中 G(x) 是累积分布函数。

1个回答

欢迎来到 SE!对于增长 x,您的函数收敛到1-norm.cdf(0),即10.5=0.5. 因此,积分确实是发散的,就像 Python 告诉你的那样;)