虚数誤差関数を実装する自由に利用できる GPL ライブラリまたはコードはありますか?
erfi(x)=-i*erf(i*x)
x
複素数 (または少なくとも実数) はどこにありi
、虚数単位はどこにありますか?
実引数の erfi の最適化を含む、erfi とスケーリングされた erfi (erfi の指数関数的成長をキャンセルするため) (Dawson 関数) の両方を含む、実数および複素数引数の通常のエラー関数のすべてのフリー/オープンソース C++ 実装は、次のとおりです。http://ab-initio.mit.edu/Faddeevaで入手可能
(この実装は、SciPy の今後のバージョン 0.12 で実際に使用され、精度の問題があった以前のバージョンの複雑な erf コードを置き換えることに注意してください: http://projects.scipy.org/scipy/ticket/1207 )
(残念ながら、複素数引数の特殊関数の評価は、複素数を実数引数のコードにプラグインするほど単純ではありません。そのため、Boost の実数 erf のテンプレート化はここでは役に立ちません。)
Boost が erf 関数の複素数をサポートしていないことがわかったので、さらに検索を行いました。C++ 用の年額 100 ドルの数学パッケージをいくつか見つけましたが、これはあなたのニーズを満たしていません。そこで、他の言語を調べたところ、Python の SciPy パッケージは erf 関数で複素数をサポートしていることがわかりました。
>>> from scipy.special import erf
>>> from numpy import complex
>>> erfi = lambda z: complex(0.0, -1.0)*erf(complex(0.0, 1.0)*z)
>>> z_in = complex(0.75, 1.25)
>>> erfi(z_in)
(0.09511238... + 1.0828473...j)
wolphramalpha の erfi(0.75+1.25*i) と正確に一致します。
したがって、これを C++ で使用するには、Boost.Python、Cython、またはその他のさまざまなパッケージを介してこれを統合できます。C++で Python をラップするコード例については、C++ への Python の埋め込みを参照してください。これにより、システムに Python と SciPy をインストールする必要が生じることに注意してください。ただし、サブスクリプション ベースではなく、複雑な引数を取る実装はあまり見られませんでした。そのため、自分で実装せずに他の言語パッケージに制限される可能性があります。
編集以下の回答は、複素数に拡張されないことが示されています編集!
C++ を使用している場合は、Boost の数学ライブラリを調べてみてください (erf はここで定義されており、boost は複素数をサポートしているため、複素数で直接使用して erfi の計算の右辺を実行できるはずです: i*erf( i*x)。
の実数値については、ドーソン関数x
を実装する GNU Scientific Library (GSL) を使用できます。この関数の値に 2π -1/2 exp( x 2 ) を掛けると、erfi( x ) が得られます。