7

私はPython用のウィルソンのスペクトル密度因数分解アルゴリズム[1]の実装を書き込もうとしています。このアルゴリズムは、[QxQ]行列関数を反復的に平方根に因数分解します(これは、スペクトル密度行列のニュートンラプソン平方根ファインダーの拡張のようなものです)。

問題は、私の実装がサイズ45x45以下の行列に対してのみ収束することです。したがって、20回の反復後、行列間の二乗差の合計は約2.45e-13になります。ただし、サイズ46x46の入力を行うと、100回程度の反復まで収束しません。47x47以上の場合、行列は収束しません。エラーは約100回の反復で100から1000の間で変動し、その後非常に急速に大きくなり始めます。

このようなものをデバッグするにはどうすればよいですか?気が狂うような特定のポイントはないようで、行列が大きすぎて実際に手動で計算を試みることはできません。誰かがこのような奇妙な数値のバグを見つけるためのヒント/チュートリアル/ヒューリスティックを持っていますか?

私はこれまでこのようなことを扱ったことがありませんが、あなたの何人かが持っていることを願っています...

ありがとう、-ダン

[1]GTウィルソン。「マトリックススペクトル密度の因数分解」。SIAMJ.Appl。数学(第23巻、第4号、1972年12月)

4

2 に答える 2

4

おそらくあなたのコードの例を使って、 scipy-userメーリングリストでこの質問をすることをお勧めします。一般的に、リストに載っている人々は数値計算に非常に精通しているようで、本当に役に立ちます。リストに従うだけでそれ自体が教育になります。

それ以外の場合は、私には何のアイデアもありません...数値の精度/浮動小数点の丸めの問題だと思われる場合、最初に試すことができるのは、すべてのdtypeをバンプして、float128違いが生じるかどうかを確認することです。

于 2009-11-21T19:14:30.177 に答える
2

区間演算は役立ちますが、パフォーマンスが、関心のあるマトリックスサイズで意味のあるデバッグを実際に可能にするのに十分であるかどうかはわかりません(数桁の速度低下を計算する必要があります。 SWを多用する「間隔」を使用した「スカラー」浮動小数点演算を支援し、どの間隔が、いつ、どこで、なぜ大きくなりすぎているかについてのチェックを追加しました。

于 2009-11-21T19:26:43.773 に答える