4

虚数誤差関数を実装する自由に利用できる GPL ライブラリまたはコードはありますか?

erfi(x)=-i*erf(i*x)

x複素数 (または少なくとも実数) はどこにありi、虚数単位はどこにありますか?

4

3 に答える 3

9

実引数の 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 のテンプレート化はここでは役に立ちません。)

于 2012-12-23T03:43:09.140 に答える
3

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)。

于 2012-08-03T22:24:19.970 に答える
0

の実数値については、ドーソン関数xを実装する GNU Scientific Library (GSL) を使用できます。この関数の値に 2π -1/2 exp( x 2 ) を掛けると、erfi( x ) が得られます。

于 2014-04-02T18:11:52.563 に答える