2008-08-19 14 views
7

数値解析コードのテストルーチンの作成方法、維持方法、考え方については、オンラインリソースがありますか?数値解析ルーチンのテスト方法は?

マトリクス乗算のテストのようなもののために私が見ることのできる制限の1つは、明白なテスト(1つの行列をアイデンティティにするなど)がコードの機能を完全にテストしないことがあることです。

また、通常は大きなデータ構造も扱っているという事実があります。誰かがこれにアプローチする方法についていくつかの良いアイデアを持っているか、見て良い場所へのポインタを持っていますか?

答えて

3

あなたは、少なくとも2つの異なる方法でのテストについて考える必要があるかのように聞こえる:

  1. いくつかの数値計算の方法は、いくつかのメタ思考を可能にします。たとえば、可逆操作では、テストケースを設定して、結果が許容範囲内のエラーであるかどうかを確認できます。例えば、マトリックスM-逆回行列M *ランダムベクトルVエラーのいくつかの許容される測定値以内に、再度Vをもたらすはずです。明らかに、この例は、行列の逆行列の乗算と行列 - ベクトルの乗算を実行します。私はこれらのようなチェーンが好きです。なぜなら、かなり多くのランダムなテストケースを生成し、手作業で書く必要がある統計的な範囲を得ることができるからです。しかし、彼らは孤立した単一の操作を行使しません。

  2. いくつかの数値メソッドは、エラーのクローズドフォーム式を持っています。既知の解を使用して状況を設定できる場合は、解と計算結果の差を比較して、既知の範囲を超える差異を探します。

基本的に、この質問には、複雑な方法をテストするだけでなく、ドメイン知識のかなり多くを必要とする問題を示しています。特定の参考文献には、あなたがテストしているものについてもう少し具体的な情報が必要です。私は間違いなくあなたが少なくともSteve Yegge's recommended book listを持っていることをお勧めしたいと思います。

1

David GriesThe Science of Programmingと呼ばれる本をチェックしてください。それはプログラムの正しさを証明することです。あなたのプログラムが正しいことを確かめたいならば(正確性を証明する時点まで)、この本は始めるのに適しています。

おそらくあなたが探しているものではありませんが、それはソフトウェア工学の質問に対するコンピュータ科学の答えです。

2

行列の計算を行う場合は、LAPACKを使用します。これは非常によくテストされたコードです。非常に賢明な人々は何十年もそれに取り組んできました。彼らは、初心者が決して考えないほどの問題について深く考えてきました。

一般に、私は2種類のテストを推奨します:系統的と無作為です。体系的には、エッジケースなどを調べることです。ソースコードを読むことができれば助かります。多くの場合、アルゴリズムには分岐点があります。この範囲内の数値に対してこの方法を計算する、別の範囲内の数値に対してこの方法を計算するなどです。両者の分岐点に近い値をテストするのは、近似誤差がしばしば最大になるためです。

ランダムな入力値も重要です。合理的にすべてのテストケースを選択すると、問題があるとわからないことを体系的に回避することができます。時には、テストする正確な値がない場合でも、ランダムな入力値をうまく利用することができます。たとえば、関数とその逆数を計算するコードがある場合は、1000個のランダムな値を生成し、関数とその逆関数を適用して開始した場所の近くに戻すかどうかを確認できます。

関連する問題