Tumming von numpy / python zur Darstellung sehr großer und sehr kleiner Zahlen

8

Ich muss das Integral der folgenden Funktion in Bereichen berechnen, die so niedrig wie -150 beginnen:

%Vor%

Das Problem ist, dass dieser Teil der Funktion

ist %Vor%

tendiert in Richtung unendlich - ich erhalte inf für Werte von x weniger als ungefähr -26 .

Und dieser Teil der Funktion

%Vor%

was äquivalent zu

ist %Vor%

tendiert in Richtung 0.

Also, eine sehr, sehr große Zahl mal eine sehr, sehr kleine Zahl sollte mir eine einigermaßen große Zahl geben - aber statt dessen gibt python mir nan .

Was kann ich tun, um dieses Problem zu umgehen?

    
dbliss 31.08.2015, 01:55
quelle

3 Antworten

4

Es gibt bereits eine solche Funktion: erfcx . Ich denke, erfcx(-x) sollte dir den gewünschten Integranden geben (beachte, dass 1+erf(x)=erfc(-x) ).

    
Simon Byrne 31.08.2015, 10:45
quelle
5

Ich denke, eine Kombination aus @ askewchans Lösung und scipy.special.log_ndtr wird den Trick machen:

%Vor%

Für x <= -20 , log_ndtr(x) verwendet einen Taylor Serienexpansion der Fehlerfunktion zur iterativen Berechnung der Protokoll-CDF direkt , die wesentlich numerischer stabil ist als einfach log(ndtr(x)) .

Aktualisieren

Wie Sie in den Kommentaren erwähnt haben, kann exp auch überlaufen, wenn x ausreichend groß ist. Während Sie dies mit mpmath.exp umgehen könnten, ist es einfacher und schneller, in np.longdouble zu konvertieren, was auf meinem Rechner Werte bis zu 1.189731495357231765e + 4932:

darstellen kann %Vor%     
ali_m 31.08.2015 02:21
quelle
2

Nicht sicher, wie hilfreich das sein wird, aber hier sind ein paar Gedanken, die für einen Kommentar zu lang sind.

Sie müssen das Integral von , was Sie richtig gemacht haben identifiziert wäre Wenn Sie die Klammern öffnen, können Sie beide Teile der Summierung integrieren.

Scipy hat diese imaginäre Fehlerfunktion implementiert

Der zweite Teil ist schwieriger:

Dies ist eine generalisierte hypergeometrische Funktion . Leider sieht es aus wie scipy hat keine Implementierung davon , aber Dieses Paket behauptet, dies zu tun.

Hier habe ich unbestimmte Integrale ohne Konstanten benutzt, die from to Werte kennend, es ist klar, wie man bestimmte verwendet.

    
Salvador Dali 31.08.2015 03:09
quelle