ネイティブC99複合型を使用するC用のODEソルバーのオープンソースセットはありますか?


12

私は多くのシミュレーションの基礎としてGSLを使用してきましたが、私の目的には少し行き過ぎであり、レガシーの理由で独自の複雑なタイプを定義しています。おそらくあまり効率的ではない自分のRunge-Kutta ODEソルバーをコーディングするのではなく、ネイティブC99複合型を使用するオープンソースODEソルバーはありますか?


どこで使用したいのかわかりませんが、一般的にRKを非効率的な方法で実装するのは非常に困難です...この問題があることを示すベンチマークを作成しましたか?
mbq

2
なし。車輪を再発明したくないので、私は自分で書いていません。そうする必要がある場合、私はそうしますが、壊れていないものに費やす時間を見つけることは、今のカードではありません。答えが出てきたら、それが私が探しているものですが、数か月間は実際に使用できません。さらに、RKは常に必要なものではなく、アルゴリズムを知っているだけです。
11:30にキューバイト

ちなみに、私はほとんどの場合、小さな量子システムのシミュレーションを行っています。ただし、排他的ではありません。
キューバイト

可変ステップサイズ RKを自分で実装することをお勧めします(教育目的を除く)。最適なステップサイズを見つけるには、多くのヒューリスティックが含まれます。
Jitse Niesen

私が言ったように、私がすぐに書くことは間違っているか、遅いでしょう。複雑な入出力でRKを実装することは特に難しいですか?あなたはそれを2つの本当の部分に分割できることを知っていますが、これはちょっと面倒です!
キューバイト

回答:


10

「過剰」と考えるかもしれませんが、PETScの時間統合パッケージはC99 complex(configure --with-scalar-type=complex)で使用できます。サポートされているメソッドは次のとおりです

これらの実装は、半離散化偏微分方程式(線の方法)などの高次元の問題に最も適しています。


少し大きいですが、知りませんでしたので+1。理想的には、私が使用するものはすべてGSLより大きくありません。マニュアルを見て、考えていることを確認します。
キューバイト

明確にするために、コンパイル時にこれらのライブラリにリンクします。そうですか?
キューバイト

コンパイル時には何もリンクされません。今まで。リンクは、コンパイル後に行われます(コンパイラーがリンカーを呼び出した場合でも)。ライブラリを動的にロードできますが、ライブラリを呼び出すコードをコンパイルするにはヘッダーが必要です。それでも問題が解決しない場合は、何をしたいのか説明してください。
ジェッドブラウン

もちろんです。愚かなエラーですが、あなたは私が何を意味するか知っていました。私の質問は、「これらのライブラリにリンクしますか?」Boostの場合のように自分のコードと同時に必要なビットをコンパイルするのとは対照的です。ライブラリから関数を呼び出すにはヘッダーが必要であることを認識しています。これはしばらく前から行っています。
キューバイト

はい、PETScはアプリケーションとは別にコンパイルします。Boostのようなヘッダーのみではありません。
ジェドブラウン

1

システムがかなり複雑でない限り、もう1つの選択肢は、複雑な表記法から、実数部と虚数部を表す2つの未知数を持つ問題に変換することです。その後、標準の実数値ODEソルバーを使用できます。


これはまさに私が避けようとしていることです。実際、GSLインテグレーターは、メモリが機能する場合にのみ本物であるため、現在これを行っています。
キューバイト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.