Numerisch stabile Bewertung des Protokolls des Integrals einer Funktion mit extrem kleinen WertenPython

Python-Programme
Anonymous
 Numerisch stabile Bewertung des Protokolls des Integrals einer Funktion mit extrem kleinen Werten

Post by Anonymous »

Wenn ich eine Zufallszahl z habe, die als Summe von zwei anderen Zufallsnummern definiert ist, x und y , dann ist die Wahrscheinlichkeitsverteilung von z die Faltung der Wahrscheinlichkeitsverteilungen für x und y . Die Faltung ist im Grunde auf ein Integral des Produkts der Vertriebsfunktionen. Oft gibt es keine analytische Lösung für das Integral in der Faltung, daher muss sie mit einem grundlegenden Quadraturalgorithmus berechnet werden. In Pseudocode: < /p>

Code: Select all

prob_z(z) = integrate(lambda t: prob_x(t) * prob_y(z-t), -inf, inf)
Für ein konkretes Beispiel kann die Summe z einer normal verteilten Variablen x und ein normalerweise verteiltes Protokollvariable y mit dem folgenden Python/Scipy -Code berechnet werden:

Code: Select all

from scipy.integrate import quad
from scipy.stats import norm, lognorm
from scipy import log

prob_x = lambda x: norm.pdf(x, 0, 1)  # N(mu=0, sigma=1)
prob_y = lambda y: lognorm.pdf(y, 0.1, scale=10)  # LogN(mu=log(10), sigma=0.1)
def prob_z(z):
return quad(lambda t: prob_x(t)*prob_y(z-t), -inf, inf)
< /code>

Jetzt möchte ich die Protokollwahrscheinlichkeit berechnen. Die naive Lösung ist einfach zu tun: < /p>

def log_prob_z(z):
return log(prob_z(z))
< /code>

Dies ist jedoch numerisch instabil. Nach etwa 39 Standardabweichungen betragen die Wahrscheinlichkeitsverteilungen numerisch 0,0. Selbst wenn die Protokollwahrscheinlichkeit einen endlichen Wert aufweist, kann sie nicht außerhalb dessen berechnet werden, indem einfach das Protokoll der Wahrscheinlichkeit eingenommen wird. Vergleiche norm.pdf (39, 1, 0) 
, die 0,0 bis norm.Logpdf (39, 1, 0) ist, was ungefähr -761 ist. Offensichtlich berechnet Scipy logpdf als log (pdf) -es findet einen anderen Weg -da es sonst -inf eine minderwertige Antwort zurückgibt. Ebenso möchte ich einen anderen Weg für mein Problem finden. /> Die Frage lautet: Weiß jemand, wie ich Protokoll (Quad (...)) neu ordnen kann.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post