polylog関数を使用するために使用できるプリプロセッサディレクティブはありますか?それともcmathに含まれていますか?もしそうなら、あなたはそれを李またはポリログのどちらで呼びますか?
編集:私が本当にやろうとしていることは、関数の不定積分の分析値を与えることです
これは多対数関数を含みます。しかし、誰かがこの機能を分析的に統合する別の方法について提案があれば、どんなアイデアでも歓迎します。
polylog関数を使用するために使用できるプリプロセッサディレクティブはありますか?それともcmathに含まれていますか?もしそうなら、あなたはそれを李またはポリログのどちらで呼びますか?
編集:私が本当にやろうとしていることは、関数の不定積分の分析値を与えることです
これは多対数関数を含みます。しかし、誰かがこの機能を分析的に統合する別の方法について提案があれば、どんなアイデアでも歓迎します。
回答:
GPLライセンスのCライブラリは、ありますANANTは-解析的数論におけるアルゴリズム上で構築し、多重対数の多倍精度実装が含まリナVepstasによるGMPは。
READMEファイルから:
このプロジェクトには、ガンマ関数、リーマンゼータ関数、多重対数関数、ミンコフスキー疑問符関数など、数論に関連するさまざまな分析関数のアドホック実装が含まれています。実装では、Gnu Multi-Precision Library(GMP)を使用して、すべての低レベルの操作を実行します。ここのコードは、Gnu GPLv3ライセンスの条件に基づいてライセンスされます。
GSL(GNU Scientific Library)には、明らかにdilogarithm関数しかありません。ただし、@ JMからのヒントに従って、倍精度で実装された後退積分(スカラー倍まで)を与えるデバイ関数を見つけます(GSL 7.10デバイ関数の次数1〜6を参照)。
MathematicaやMaximaなどのシンボリック統合ソフトウェアは以下を提供します:
左側は明らかに場合は純粋に実数値ですが、表示される多対数は複素数値になります(であるため、等式は虚数部の完全な相殺に依存します)。この場合、式を代入することで複雑な演算の必要性を回避できます。
多重対数の引数であるため、これは改善され、結果は純粋に実数値です。がゼロの場合の適切な結果に注意してください。これは、先行項と定数の間のキャンセルによって達成されます。したがって、小さな正の値の場合、相対誤差が問題になることがあります。
私たちの神秘的な一定のことを注意制限上位これらの(単調増加)の積分にバインドされます。
タイトルの質問「C ++でのpolylogarithm関数の使い方」を再確認できます。CやC ++の多対数関数の標準実装が存在しないことは重要です。目標が実装の追加ライブラリを回避することである場合、おそらく、GertVdEの回答がリンクしているDavid C. Woodの論文によって提案されている行に沿って、独自のルーチンを展開することにかなりうまく着手できます。
私の回答の最初の部分で提案されている多精度ルーチンに加えて、多対数特殊関数の 実()バージョンと複素()バージョンの両方を実装する、Stephen L. Moshier によるCephesの成熟した(無料)倍精度数学ライブラリがあります。それらの精度はCの基になる標準数学関数に部分的に依存しますが、Cephes ソースドキュメントは、倍精度の限界付近での1から4次までのテストと理論的なピークエラーを報告します。polylog
cpolylog
または、他のソフトウェアを使用して、積分のために記述した求積法ルーチンを直接チェックする(多対数を参照しない)こともできます。このMath.SEの質問でスケッチしたように、積分の原点を中心とするべき級数は収束が制限されていますが、代わりに継続分数展開を使用することでこれを軽減できます。
すぐに満足できるように、特にMaximaに含まれている(無料の)数値求積QUADPACKルーチンをお勧めしますquad_qag
。たとえば、次のMaximaコマンドで[0,5]の積分を見つけます:
(%i1) quad_qag(x^3/(%e^x - 1), x, 0, 5, 2);
(%o1) [4.899892158330582,5.4399730923588665*10^-14,21,0]
入力引数のうち、最後の引数のみが説明を負います。の5番目の引数quad_qag
は、適応求積法に適用するルールを指定します。可能な値は1〜6であり、より高度で正確なものになります。出力行には、最初に数値の求積が表示され、その後に絶対誤差の推定値、使用されたサブインターバル/ステップの数、およびリターンコードが表示されます(ここでゼロはエラーまたは特別な条件が見つからないことを意味します)。
まず、高精度の演算が必要な場合は、アプリケーションに基づいて選択する必要があります(つまり、ポリログ関数のIEEE倍精度の結果だけで十分ですか、それともより高い精度が必要ですか)。高精度が必要な場合は、GMPライブラリー周辺のツールファミリーを調べることができます。
そうでない場合は、近似を使用できます。いくつかの文学研究は私にこの記事を示しました。記事の最後には、「選択テーブル」があります。必要なポリログの引数に基づいて、近似式を選択できます。ただし、安定性と精度を確認するように注意してください。
(ネストされたループではなく)評価があまり必要ない場合は、二重指数法を使用して数値求積法を実行します。