在Python中集成具有很大参数值的函数

时间:2019-05-15 11:44:53

标签: integration

我具有如下定义的功能

\begin{equation}
f(x) = e^{-k1/x}x^{-2}(k1/x+56)^{81}
\end{equation}

现在我想找到从0到无穷大的积分函数。

\begin{equation}
S = \int^{\inf}_{0} f(x) dx
\end{equation}

然后我想找到如下定义的累积函数

\begin{equation}
CDF(p) = \int^{p}_{0} \frac{f(x)}{S} dx 
\end{equation}

为此,我用Python编写了一个程序。

from matplotlib import pyplot as plt
from scipy.integrate import quad
from math import pi, exp
import numpy as np
def func(x, k1, n):
    w = -1.8*n+15 # scale the function down. 
    return (10**w)*exp(-k1/x)*x**(-2)*(k1/x+56)**n

def S(k1, n):
    return quad(func, 0, 1e+28, args=(k1, n))[0] + quad(func, 1e+28, 1e+33, args=(k1, n))[0]

def CDF(x, k1, n):
    return quad(func, 0, x, args=(k1, n))[0]/S(k1, n)

k1 = 7.7e+27 # When it's <3, CDF does not generate error. 
n = 81 
print(S(k1, n))
print(CDF(1.1e+27, k1, n))

但是不幸的是,CDF(1.1e + 27)抛出错误“结果超出范围”。

如何获取CDF(1.1e + 27)?

0 个答案:

没有答案