Gibt es Präprozessoranweisungen, die zur Verwendung der Polylog-Funktion verwendet werden könnten? Oder ist es in cmath enthalten? Wenn ja, nennen Sie es Li oder Polylog?
EDIT: Was ich wirklich versuche, ist einen analytischen Wert für das unbestimmte Integral der Funktion anzugeben
welches Polylogarithmusfunktionen beinhaltet. Aber wenn jemand einen Vorschlag für eine andere Möglichkeit hat, diese Funktion analytisch zu integrieren, wäre ich zu jeder Idee willkommen.
c++
special-functions
Flamingohats
quelle
quelle
Antworten:
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:
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):
Symbolische Integrationssoftware wie Mathematica oder Maxima bietet:
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: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).quelle
Zunächst sollten Sie basierend auf Ihrer Anwendung auswählen, ob Sie hochpräzise Arithmetik benötigen (dh werden Sie mit nur IEEE-Ergebnissen mit doppelter Genauigkeit für die Polylog-Funktionen zufrieden sein oder benötigen Sie eine höhere Präzision)? Wenn Sie eine hohe Präzision benötigen, können Sie in der Toolfamilie der GMP-Bibliothek nachsehen.
Wenn Sie dies nicht tun, können Sie Näherungswerte verwenden. Einige Literaturrecherchen haben mich auf diesen Artikel hingewiesen . Am Ende des Artikels befindet sich eine "Auswahltabelle": Basierend auf den Argumenten der Polylogs, die Sie benötigen, können Sie eine Näherungsformel auswählen. Achten Sie jedoch auf Stabilität und Genauigkeit.
Wenn Sie nicht zu viele Auswertungen benötigen (nicht in einer verschachtelten Schleife), würde ich einfach die numerische Quadratur mit der doppelt exponentiellen Methode verwenden.
quelle
quelle