Интеграция функции с очень большими значениями параметров в Python - PullRequest
1 голос
/ 15 мая 2019

У меня есть функция, определенная как показано ниже

\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)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...