数値ODEソルバーのソフトウェアライブラリで作業を開始しようとしていますが、ソルバー実装のテストを定式化する方法に苦労しています。私の野望は、最終的に、ライブラリには、非スティッフな問題とスティッフな問題の両方のソルバーと、少なくとも1つの暗黙的なソルバー(多かれ少なかれMatlab のode
ルーチンの機能と同等)が含まれるため、テスト方法論はさまざまな問題の種類と異なるソルバーの基準。
私の問題は、このテストをどこから始めるべきかわからないことです。アルゴリズムの出力をテストするいくつかの異なる方法を考えることができます。
分析的な解決策がある問題をテストし、返されたすべてのデータポイントについて数値的解決策が許容範囲内にあることを確認します。これには、さまざまなソルバーで使用したいすべての特性(剛性、暗黙的問題など)を示す多くの分析問題についての知識が必要です。
このメソッドは、ソルバーメソッドの結果をテストします。したがって、ソルバーが実際に機能するという保証はなく、特定のテスト問題に対して機能するというだけです。したがって、ソルバーが機能することを自信を持って確認するには、多数のテスト問題が必要だと思います。
私が実装する予定のアルゴリズムを使用して、いくつかのタイムステップでソリューションを手動で計算し、ソルバーで同じことを行い、結果が同じであることを確認します。これには、問題の真の解決策に関する知識は必要ありませんが、かなりの実地作業が必要です。
一方、この方法はアルゴリズムのみをテストします。これは私には問題ありません。4 次のルンゲクッタが機能することを他の誰かが証明した場合、私は必死に感じる必要はありません。ただし、テストデータを生成するための適切な方法がわからないため、テストケースの作成が非常に面倒になるのではないかと心配しています(手作業を除き、手間がかかります...)。
私の現在の知識では、上記の両方の方法には重大な制限があります。最初の方法のテスト問題の良いセットがわからず、2番目の方法のテストデータを生成する良い方法もわかりません。
数値ODEソルバーを検証する他の方法はありますか?検証する必要のある実装に関する他の基準はありますか?そこからODEソルバをテストする上の任意の良い(無料)リソースがある1は?
編集:
この質問は非常に幅広いので、少し明確にしたいと思います。作成するテストスイートは、主に2つの目的を満たします。
ソルバーが解決しようとしている問題に対して、ソルバーが期待どおりに機能することを確認します。言い換えれば、非スティッフな問題のソルバーは、スティッフな問題にバナナを使用することができますが、非スティッフな問題ではうまく機能するはずです。また、ライブラリに他のソルバーがより高い精度を提供している場合、非常に正確な結果を適用する必要はないかもしれません-「十分に正確」です。したがって、私の質問の一部は、どのソルバーにどのテストを使用する必要があるかです。または、少なくとも、どのように判断するのか。
ライブラリのインストール時の健全性テスト。これらのテストは、複雑である必要はありません(する必要はありません)。5秒未満で実行できる非常に基本的なものですが、何かがおかしい場合はユーザーに警告します。したがって、非常に単純なテストを構築する方法も必要ですが、それでもライブラリの状態について何かを教えてくれます。
1はい、私は私の目をグーグルでてきたが、私は何を見つけるのほとんどはの顕著な例外を除いて、非常に些細な例で講義ノートであるCWI ODEテスト・バーリからセットならば、私は知らない、またはどのように、私はテストしたいものよりもはるかに洗練されたソルバーを扱うため、私の目的に使用できます...