Es gibt eine GPL-C-Bibliothek, ANANT - Algorithmen in der analytischen Zahlentheorie von Linas Vepstas, die eine mehrpräzise Implementierung des Polylogarithmus auf der Grundlage von GMP umfasst .
Aus der README-Datei:
Dieses Projekt enthält Ad-hoc-Implementierungen verschiedener analytischer Funktionen, die für die Zahlentheorie von Interesse sind, einschließlich der Gammafunktion, der Riemannschen Zetafunktion, des Polylogarithmus und der Minkowski-Fragezeichenfunktion. Die Implementierung verwendet die Gnu Multi-Precision Library (GMP), um alle Operationen auf niedriger Ebene auszuführen. Der hierin enthaltene Code ist unter den Bedingungen der Gnu GPLv3-Lizenz lizenziert.
Die GSL (GNU Scientific Library) hat offenbar nur die Dilogarithmusfunktion . Nach einem Hinweis von @JM findet man jedoch die Debye-Funktion, die das hintere Integral (bis zu einem skalaren Vielfachen) mit doppelter Genauigkeit implementiert (siehe GSL 7.10 Debye-Funktionen, Befehle 1 bis 6):
D.n( x ) = nxn∫x0tndtet- 1
Symbolische Integrationssoftware wie Mathematica oder Maxima bietet:
∫x0t3dtet- 1= 6 Li4( ex) - 6 x Li3( ex) + 3 x2Li2( ex) + x3Log( 1 - ex) - x44- π4fünfzehn
x > 0ex> 1
∫x0t3dtet- 1= - 6 Li4( e- x) - 6 x Li3( e- x) - 3 x2Li2( e- x) - x3Li1( e- x) + π4fünfzehn
[ 0 , 1 ]x = 0x
π4/ 15
∫∞0t3dtet- 1= Γ ( 4 ) ζ( 4 ) = 6 ⋅ π490
Wir können jetzt die Titelfrage wiederholen: Wie verwende ich die Polylogarithmusfunktion in c ++? Es ist erwähnenswert, dass es keine Standardimplementierung von Polylogarithmusfunktionen für C oder sogar C ++ gibt . Wenn das Ziel darin besteht, zusätzliche Bibliotheken für Ihre Implementierung zu vermeiden, können Sie Ihre eigenen Routinen erstellen, möglicherweise in Anlehnung an das David C. Wood-Papier, auf das die Antwort von GertVdE verweist.
Neben den im ersten Teil meiner Antwort vorgeschlagenen Multipräzisionsroutinen gibt es in Cephes eine ausgereifte (kostenlose) Mathematikbibliothek mit doppelter Genauigkeit von Stephen L. Moshier, die sowohl reelle ( polylog
) als auch komplexe ( cpolylog
) Versionen der Polylogarithmus-Sonderfunktionen implementiert . Obwohl ihre Genauigkeit teilweise von den zugrunde liegenden mathematischen Standardfunktionen von C abhängt, werden in der Cephes- Quellendokumentation Tests und theoretische Spitzenfehler für die Ordnungen 1 bis 4 etwa an den Grenzen der doppelten Genauigkeit angegeben.
Alternativ können Sie eine andere Software verwenden, um die Quadraturroutinen, die Sie für Ihr Integral geschrieben haben, direkt zu überprüfen (ohne auf Polylogarithmen zu verweisen). Wie ich in dieser Math.SE-Frage skizziere, weist die am Ursprung des Integrals zentrierte Potenzreihe eine begrenzte Konvergenz auf, dies kann jedoch durch die Verwendung einer fortgesetzten Brucherweiterung gemildert werden.
Zur sofortigen Befriedigung empfehle ich die (freie) numerische Routinen Quadratur QUADPACK in enthalten Maxima , speziell quad_qag
. Finden Sie zum Beispiel das Integral über [0,5] mit diesem Maxima-Befehl:
(%i1) quad_qag(x^3/(%e^x - 1), x, 0, 5, 2);
(%o1) [4.899892158330582,5.4399730923588665*10^-14,21,0]
Von den Eingabeargumenten trägt nur das letzte eine Erklärung. Das fünfte Argument quad_qag
gibt an, welche Regel in der adaptiven Quadratur anzuwenden ist. Mögliche Werte sind 1 bis 6 und sorgen für zunehmende Raffinesse / Genauigkeit. Die Ausgabezeile gibt zuerst die numerische Quadratur an, gefolgt von einer Schätzung ihres absoluten Fehlers, der Anzahl der verwendeten Teilintervalle / Schritte und einem Rückkehrcode (hier bedeutet Null, dass kein Fehler oder keine besonderen Bedingungen gefunden wurden).