数値ODEソルバーの実装をどのようにテストしますか?


26

数値ODEソルバーのソフトウェアライブラリで作業を開始しようとしていますが、ソルバー実装のテストを定式化する方法に苦労しています。私の野望は、最終的に、ライブラリには、非スティッフな問題とスティッフな問題の両方のソルバーと、少なくとも1つの暗黙的なソルバー(多かれ少なかれMatlab odeルーチンの機能と同等)が含まれるため、テスト方法論はさまざまな問題の種類と異なるソルバーの基準。

私の問題は、このテストをどこから始めるべきかわからないことです。アルゴリズムの出力をテストするいくつかの異なる方法を考えることができます。

  • 分析的な解決策がある問題をテストし、返されたすべてのデータポイントについて数値的解決策が許容範囲内にあることを確認します。これには、さまざまなソルバーで使用したいすべての特性(剛性、暗黙的問題など)を示す多くの分析問題についての知識が必要です。

    このメソッドは、ソルバーメソッドの結果をテストします。したがって、ソルバーが実際に機能するという保証はなく、特定のテスト問題に対して機能するというだけです。したがって、ソルバーが機能することを自信を持って確認するには、多数のテスト問題が必要だと思います。

  • 私が実装する予定のアルゴリズムを使用して、いくつかのタイムステップでソリューションを手動で計算し、ソルバーで同じことを行い、結果が同じであることを確認します。これには、問題の真の解決策に関する知識は必要ありませんが、かなりの実地作業が必要です。

    一方、この方法はアルゴリズムのみをテストします。これは私には問題ありません。4 次のルンゲクッタが機能することを他の誰かが証明した場合、私は必死に感じる必要はありません。ただし、テストデータを生成するための適切な方法がわからないため、テストケースの作成が非常に面倒になるのではないかと心配しています(手作業を除き、手間がかかります...)。

私の現在の知識では、上記の両方の方法には重大な制限があります。最初の方法のテスト問題の良いセットがわからず、2番目の方法のテストデータを生成する良い方法もわかりません。

数値ODEソルバーを検証する他の方法はありますか?検証する必要のある実装に関する他の基準はありますか?そこからODEソルバをテストする上の任意の良い(無料)リソースがある1は

編集:
この質問は非常に幅広いので、少し明確にしたいと思います。作成するテストスイートは、主に2つの目的を満たします。

  1. ソルバーが解決しようとしている問題に対して、ソルバーが期待どおりに機能することを確認します。言い換えれば、非スティッフな問題のソルバーは、スティッフな問題にバナナを使用することができますが、非スティッフな問題ではうまく機能するはずです。また、ライブラリに他のソルバーがより高い精度を提供している場合、非常に正確な結果を適用する必要はないかもしれません-「十分に正確」です。したがって、私の質問の一部は、どのソルバーにどのテストを使用する必要があるかです。または、少なくとも、どのように判断するのか。

  2. ライブラリのインストール時の健全性テスト。これらのテストは、複雑である必要はありません(する必要はありません)。5秒未満で実行できる非常に基本的なものですが、何かがおかしい場合はユーザーに警告します。したがって、非常に単純なテストを構築する方法も必要ですが、それでもライブラリの状態について何かを教えてくれます。


1はい、私は私の目をグーグルでてきたが、私は何を見つけるのほとんどはの顕著な例外を除いて、非常に些細な例で講義ノートであるCWI ODEテスト・バーリからセットならば、私は知らない、またはどのように、私はテストしたいものよりもはるかに洗練されたソルバーを扱うため、私の目的に使用できます...


2
@ user75064:もちろんです!私はそのサイトが存在することすら知らなかった=)どんな改造でも、そこに自由に移行してください。
トマスアスチャン

Math Stack Exchangeのこの回答には、他のテストセットへのリンクがあります。
ジェフオックスベリー

@GeoffOxberry:以前にそれらのいくつかを見つけました。それらのほとんどはFORTRANで実装されており、読者が同じ言語でソルバーをテストすることを前提としているため、別のエラーソースが追加されます。どうもありがとう!
トマスアスチャン

回答:


12

これは非常に広範な質問であり、考えるべきいくつかのことをお伝えします(一部は既に投稿に含まれていますが、完全を期すためにここで繰り返します)。

問題の範囲

  • 問題を特定する方法のインターフェースを定義する必要があります。
  • 解決できるように固定したり、変更したりできるパラメーターを許可しますか?
  • ϵ
  • 無限の精度を許可しますか?
  • 数値精度に対する速度と感度をテストしますか?
  • 結果を比較するために、すでに存在する2つ(おそらくそれ以上)のライブラリを選択しましたか?
  • 停止基準をどのように選択し、さまざまな方法を使用して、ユーザーが独自の停止基準を選択または定義できるようにしますか?
  • さまざまな手段を使用してエラーを測定し、ユーザーがそれらをオンまたはオフにできるようにしますか?
  • Computer-Algebra-Systems(CAS)のようなプロフェッショナルパッケージを見て、それらが許可するすべてのオプションを理解しましたか?
  • 結果および/または比較および/またはプロットの表示を許可しますか?

問題の推奨事項

  • 問題の原因、問題のテスト方法の範囲、ルーチンの実行の結果とメトリックをキャプチャするテスト仕様を作成する必要があります。
  • 私は確かに彼らが使用している問題(テストファイルかもしれません)のためにすでにそこにある他のライブラリに目を向けます。
  • 私は大学の図書館に行き、ODEに関する本を読み、既知の閉じた形式または数値のみの解決策を持つすべてのタイプの問題を引き出します。
  • ケース1:正確な結果と数値の結果を比較するために、できるだけ多くの閉形式解問題のバリエーションを取得したい。
  • ケース2:作業例を見つけてキャプチャし、それらを複製できるすべての数値分析の本に行きます。さらに、問題のセット、特にほとんどの本に存在するいくつかの病理学があるもの(このタイプまたはそのタイプに対する感度)をキャプチャします。
  • ケース3:物理学、生態学、生物学、経済学などの応用数学のさまざまな分野に行きます。これらの各ドメインから問題をキャプチャして、問題の仕様言語がそのような例を許可していることを検証します。
  • ケース4:特定の著者が特定のアプローチを変更して、何らかの病理学、奇妙さ、または困難を説明しなければならない最も有用な例を含む論文/ジャーナルを調査します。
  • ケース5:追加の例については、Webを検索してください。以下のために硬く、ここでは参考文献を参照し、テスト問題を探し出すためにそれらすべてを熟読。以下に、MATLABの例をいくつか紹介します。

これは一意ではありません。Dennis and Schnabel著の「Unconstrained Optimization and Nonlinear Equationsの数値手法」、付録B「テスト問題」を参照すると、どのように実行されたかを確認できます。私が今まで見た中で最も美しいアルゴリズムのセットの1つを開発した後、彼らはそれが問題になった一連の問題を投げかけました。あちこち調整する必要がありました!それらには、ソルバーの能力に負担をかける5つの非常に異なる病理学的問題が含まれていました。これにより、多くの理由で処理できないアルゴリズムに引き続き問題を投げることができることがわかりました。注意してください、彼らはMore '、Garbow、およびHillstromからこの問題のセットを借りました(あなたはその参照を調べることができ、おそらくあなたがガイドとして使用できる他のものもあります)。

つまり、これは簡単な作業ではありません。更新の有効性を常にテストでき、問題を引き起こさないようにする既知の応答テストケースが必要です。つまり、低いものから高いもの、簡単なものから難しいもの、可能性のあるものから不可能なものまで、再現性のある広範な問題のセットです。


2

ODEソルバーに対して実行する健全性チェックの1つは、システムの行列の指数を正確に計算することにより、より小さな線形システムで単純にチェックすることです。すなわち与えられた

dudt=Au

エラーを確認してください

exp(tA)u0u^(t)

u^(t)

タイムステッパーのいずれかで指数関数を計算しないでください(つまり、疑わしいメソッド番号6 :) http://www.cs.cornell.edu/cv/researchpdf/19ways+.pdf


ご注意:DEインテグレーターは、不正確さではなく、スケーリングと2乗に比べてかなり非効率的であるという点で「疑わしい」と見なされました。
JM

1

PDEを解決するコードの実装をテストするために使用される一般的な方法論である「Manufactured Solutionsの方法」を調査してみてください(数学的エラーとコーディングエラーの両方を見つけるために使用できます)。ソリューションの方法論が十分に一般的であれば、ODEを解くために機能するように適応できると思います。

http://prod.sandia.gov/techlib/access-control.cgi/2000/001444.pdf

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.