Ich habe zwei Zufallsvariablen X und Y, die gleichmäßig auf dem Simplex verteilt sind:
Ich möchte die Dichte ihrer Summe auswerten:
Nachdem ich das obige Integral ausgewertet habe, ist mein letztes Ziel, das folgende Integral zu berechnen:
Um das erste Integral zu berechnen, erzeuge ich gleichmäßig verteilte Punkte in Simplex und überprüfe dann, ob sie zu der gewünschten Region in dem obigen Integral gehören, und nehme den Bruchteil von Punkten, um die obige Dichte zu bewerten.
Sobald ich die obige Dichte berechnet habe, befolge ich eine ähnliche Prozedur, um das obige Logarithmusintegral zu berechnen, um seinen Wert zu berechnen. Dies war jedoch extrem ineffizient und dauerte so 3-4 Stunden. Kann mir jemand einen effizienten Weg vorschlagen, dies in Python zu lösen? Ich benutze Numpy Paket.
Hier ist der Code
%Vor%Nicht sicher, dass es eine Antwort auf Ihre Frage ist, aber fangen wir an
Hier sind einige Codebeispiele und eine Diskussion, wie man korrekt von Dirichlet (n) (aka Simplex), via gammavariate()
oder via -log(U)
, wie Sie es gemacht haben, aber mit richtigem Handle für potentielle Ecken, link
Problem mit Ihrem Code, wie ich sehen kann ist, dass, sagen wir, für das Sampling Dimension = 2 Simplex
Du erhältst drei (!) einheitliche Zahlen, überspringst sie aber beim Listenverständnis für x
. Das ist falsch. Um n-dimensionales Dirichlet zu testen, sollten Sie genau n
U (0,1) erhalten und dann transformieren (oder n
samples von gammavariate).
Aber, beste Lösung könnte einfach numpy.random.dirichlet()
verwenden, sie ist in C geschrieben und könnte die schnellste sein, siehe link .
Der letzte, meiner bescheidenen Meinung nach, schätzen Sie log(PDF(X+Z))
nicht richtig ein. Ok, du findest einige, aber was ist PDF(X+Z)
an diesem Punkt?
Macht das
%Vor%sieht wie PDF aus? Wie hast du es geschafft?
Einfacher Test: Integration von PDF(X+Z)
über den gesamten X+Z
-Bereich. Hat es 1 produziert?
AKTUALISIEREN
Sieht so aus, als könnten wir verschiedene Ideen haben, was wir Simplex, Dirichlet usw. nennen. Ich bin ziemlich genau mit dieser Definition , wobei in d
dim space%% co_de und d
simplex sind konvexe Hüllen, die Vertices verbinden. Simplex Dimension ist immer
eine weniger als Platz aufgrund der Beziehung zwischen Koordinaten. Im einfachsten Fall ist d-1
= 2, 1-simplex ist ein Segment, das die Punkte (1,0) und (0,1) verbindet, und aus der Dirichlet-Verteilung habe ich das Bild
Im Fall von d
= 3 und 2-simplex haben wir dreieckige Verbindungspunkte (1,0,0), (0,1,0) und (0,0,1)
Code, Python
%Vor%Tags und Links python numpy statistics distribution montecarlo