2012-07-04 32 views
10

私はC++で分析的統合を行う必要があります。たとえば、次のような式を統合する必要があります。exp[I(x-y)]Iは虚数です。C++でのシンボリック計算

C++でどうすればいいですか?

私はGiNaCを試しましたが、多項式を積分できます。私もSymbolicC++を試しました。 sinecosineまたはexp(x)ln(x)のような機能を統合することはできますが、あまり強力ではありません。例えば、x*ln(x)を統合することはできません。これは、Mathematicaを使用するか、または部品ごとに統合することで簡単に取得できます。

C++の解析的統合のようなシンボリック計算を行うことができる他のツールやライブラリはありますか?

+0

あなたは既に[Maxima](http://maxima.sourceforge.net/)を試しましたか? – jxh

+0

はMatlabにオプションを使用していますか? Matlabの象徴的なツールボックスは、これらのことを実行できるはずです。 C Matlabエンジンを使用すると、C++コードから呼び出すことができますか? – Philipp

+0

私はMatlabのライセンスを持っていないので使えません。 MaximaはC++構文を使用していますか? 私はC++でいくつかのライブラリを好む。 maximaやMatlabのような他のプログラムを使いたいのであれば、代わりにMathematicaを使います。 私は実際に私のプログラムをmathematicaに書きました。 Integro-Defferential方程式を単純化する簡単なプログラムですが、問題はMathematicaが計算に必要な時間に関して効率的ではないということです。だから私はC++で自分のプログラムを書くことに決めました。 – MOON

答えて

4

シンボリックな統合が必要な場合は、mathematicaやmaximaで実行するよりも速く何かを得ることはできません。すでにC++のように書かれています。あなたの方程式にMathematicaやMaximaができない方法で悪用できる非常に特殊な数式がない限り、おそらくあなたは運が悪いでしょう。少なくとも、あなたはそのようなカスタム操作を市販のライブラリを使用しています。

数値ソリューションを必要とする場合は、スピードを上げるために独自のコードを書くことが正当な理由があります。 (私はPDEの数値解を生成するために行ったことを知っています)。私はそれを認識してい

+0

Mathematicaで書かれた私のコードは、このリンクにあります:http://www.mediafire.com/?cw9s3ne7jz8fq7s このコードはリキュールです関係。私はそれに第0項を与え、それは第1項を得て、次に第1項を使用して第2項を得るなどです。 最初の4つの期間はそれほど時間がかかりませんが、それ以上の条件では時間がかかります。 このコードは積分微分方程式を解くことになっているので、多くの項が必要です。少なくとも私は50項が必要だと思う。 – MOON

+0

Mathematicaで時間がかかるので、C++で書くことにしました – MOON

+0

mathematicaノートブックを開くことができません(最近、mathematicaは利用できません...) –

1

他のC++ライブラリは、記号計算を行います

私は間違っていないよ場合は、SymEngineはまだありません統合をサポートする。しかし、ピラニアはします。ピラニアのdocumentationは現時点では多少限定されており、開発中ですが、統合機能hereを見ることができます。 2番目のリンクは、PythonラッパーPiranhaの構文を使用しています。しかし、Piranhaは、 "多変量多項式多項式や他の密接に関連する記号オブジェクト(Poissonシリーズなど)を記号的に操作するためのコンピュータ代数ライブラリです"ということで、あなたが興味を持っている特定の関数を統合することはできないと思います。

C++ではありませんが、複雑なシンボリック統合が可能なSymPy for Pythonもあります.SymPyの統合のドキュメントはhereです。