ご挨拶、
lapackリソースをgithubに移動していただきありがとうございます。
i)報告された古いバグhttp://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=2&t=1820#p11388を思い出させたいのですが、最新のlapack-3.7.0で表示されます。ここで報告しているように、 https://github.com/miroi/lapack-dsyevr-test 。
lapackバグトラッカー(http://www.netlib.org/lapack/bug_list.html-バグ126)に基づいて、この厄介なバグを処理していますよね?
ii)Freelは、この特定のベクトルの直交性テスト(https://github.com/miroi/lapack-dsyevr-test)を自由に受けて、lapackテストに追加します。
最高、ミロ
こんにちはミロ、GitHubの問題としてBUG126を追加していただきありがとうございます。 これは素晴らしい。 Osni( @oamarques )は#100に取り組んでいます。 テストコードを共有していただきありがとうございます。 はい、LAPACKの新しいテストスイートに取り組む計画があり、厄介なマトリックスは大歓迎です。 Osniにはそのようなマトリックスが多数あり、目標は、テスト用のインフラストラクチャとともに、これらのコレクションを増やすことです。 いずれにせよ、GitHubの問題としてBUG126を追加していただきありがとうございます。 これは素晴らしい。 乾杯、ジュリアン。
このバグは、DSTEMRで使用される分割基準に関連しており、対応するソースファイルの606行目から始まります(LAPACK 3.7.0のように)。 入力変数TRYRACに基づいて、サブルーチンDLARRRはINFO = 1を返し(これはDLARRRの予想される動作と矛盾するようです)、その後、入力として渡された(特定の)三重対角行列の有害な分割をトリガーします。 _DLARRRの機能を無視し、「分割基準の設定」の直前にIINFO = 0を設定すると、返されるベクトルは直交します。新しいバージョンのDLARRFを使用する場合は、問題100を参照してください。ただし、これはこのバグの適切な修正ではありません。 DLARRRの正しい動作を理解する必要があります。_)
こんにちは、このバグの解決に関するニュースはありますか?
@oamarques基盤となるDSTEMRの代わりにDSTEGRを使用すると、この問題が軽減されますか?
@uihsnv :良い質問です。 STEGRはもう維持されません。 それには問題があります。 私たちはSTEMRの開発と保守のみを行っています。 しかし、はい、STEGRがこの問題に対して何をするかを確認することは良い考えです。
@langouああ! 私は今まで知らなかった!! コードでSTEGRのインスタンスをいくつか使用しています。 STEMRの使用に切り替える必要がありますか?
また、 @ miroiが共有したテストにいくつかの変更を加えました。彼が受け入れると、違いがわかります。
コードでSTEGRのインスタンスをいくつか使用しています。 STEMRの使用に切り替える必要がありますか?
そう思います。 @oamarquesがこれについてすぐにフォローアップしてくれることを願っています。
また、 @ miroiが共有したテストにいくつかの変更を加えました。彼が受け入れると、違いがわかります。
変更されたテストを@oamarquesと共有するのは素晴らしいことです
こんにちは、このバグに関するニュースはありますか? そして、なぜそれは「ドキュメンテーション」とラベル付けされたのですか?
それでも、新しいlapackはsthisエラーを出します(gfortran 4.9.2、https://github.com/miroi/lapack-dsyevr-testでテスト済み):
~~~
DIRACの対角化ルーチンのテストプログラムへようこそ!
読み取りN=9 NZ = 1
対角化のための行列が読み取られました
割り当てられたRSサブルーチンの配列
EispackのRS固有値:
1 -1.5000000000000062
2-1.5000000000000002
3 -1.4999999999999982
4 0.49999999999999772
5 0.49999999999999856
6 0.49999999999999994
7 0.50000000000000033
8 0.50000000000000122
9 2.4999999999999969
* EISPACK RS *
U ^ {+} A U-eps?= 0> norm / diag:0.1912D-15 norm / offdiag:0.1008D-15
U ^ {+} U-I?= 0> norm / diag:0.2344D-15 norm / offdiag:0.7239D-16U U ^ {+}-I?= 0> norm / diag:0.9869D-16 norm / offdiag:0.9320D-16
LAPACK DSYEVR固有値:
1 -1.5000000000000056
2-1.5000000000000009
3 -1.4999999999999973
4 0.49999999999999523
5 0.49999999999999867
6 0.49999999999999939
7 0.49999999999999950
8 0.50000000000000100
9 2.4999999999999862
* LAPACK DSYEVR *
U ^ {+} A U-eps?= 0> norm / diag:0.1807D-14 norm / offdiag:0.9012D-07
U ^ {+} U-I?= 0> norm / diag:0.2591D-15 norm / offdiag:0.1802D-06U U ^ {+}-I?= 0> norm / diag:0.7543D-06 norm / offdiag:0.4951D-06
LAPACK DSTEGR固有値:
1 -1.5000000000000056
2-1.5000000000000009
3 -1.4999999999999973
4 0.49999999999999523
5 0.49999999999999867
6 0.49999999999999939
7 0.49999999999999950
8 0.50000000000000100
9 2.4999999999999862
* LAPACK DSYTRD + DSTEGR *
U ^ {+} A U-eps?= 0> norm / diag:0.1617D + 01 norm / offdiag:0.1644D + 00
U ^ {+} U-I?= 0> norm / diag:0.1234D-15 norm / offdiag:0.1802D-06U U ^ {+}-I?= 0> norm / diag:0.5411D-06 norm / offdiag:0.2301D-06
~~~
これを読み直すと、それを修正することは、無限ループを修正しようとしたことによって引き起こされた#100の修正にかかっているようです(私は最近それらのための不完全なローテクソリューションを提案することに特化していると感じています)そしてすべてが無限ループに入りました理想的な解決策が何であるかについての疑問。 誰かが3.5.0に戻って、#100で言及されているフラグ変数を変更する前に、このケースがどのように動作したかを確認しましたか?
最も参考になるコメント
このバグは、DSTEMRで使用される分割基準に関連しており、対応するソースファイルの606行目から始まります(LAPACK 3.7.0のように)。 入力変数TRYRACに基づいて、サブルーチンDLARRRはINFO = 1を返し(これはDLARRRの予想される動作と矛盾するようです)、その後、入力として渡された(特定の)三重対角行列の有害な分割をトリガーします。 _DLARRRの機能を無視し、「分割基準の設定」の直前にIINFO = 0を設定すると、返されるベクトルは直交します。新しいバージョンのDLARRFを使用する場合は、問題100を参照してください。ただし、これはこのバグの適切な修正ではありません。 DLARRRの正しい動作を理解する必要があります。_)