私はWilsonのスペクトル密度分解アルゴリズム[1]をPython用に実装しようとしています。このアルゴリズムは[QxQ]行列関数をその平方根に反復的に因数分解する(これはスペクトル密度行列のNewton-Raphson平方根ファインダの拡張の一種である)。数値安定性の問題をデバッグするための戦略?
問題は、私の実装が45x45以下のサイズの行列にしか収束しないということです。したがって、20回の反復の後、マトリックス間の合計の二乗差は約2.45e-13である。しかし、私が46x46のサイズを入力すると、それは100回程度の反復まで収束しません。 47x47以上の場合、行列は収束しません。約100回反復する間に誤差は100と1000の間で変動し、その後非常に迅速に増加し始める。
このようなものをデバッグしようとするとどうなりますか?それが狂った具体的なポイントは何もないように見えますが、実際に計算を実際に試みるには行列が大きすぎます。誰もこのような奇妙な数値のバグを見つけるためのヒント/チュートリアル/ヒューリスティックを持っていますか?
私は前にこのようなものを扱ったことがありませんが、私はあなたのいくつかは持っている願っています...
おかげで、 - ダン
[1] G. T.ウィルソン。 "行列のスペクトル密度の因数分解"。 SIAM J. Appl。 Math(Vol 23、No. 4、1972年12月)
「45x45のサイズのマトリックスにのみ収束しますか?」とはどういう意味ですか? 45x45より小さい行列も同様に失敗しますか? – badp
いいえ、申し訳ありませんが、投稿を編集します。それはサイズが45x45以下のものにうまく収束する – Dan