Lapack: DSYEVRは非直交ベクトルを返します

作成日 2017年05月15日  ·  10コメント  ·  ソース: Reference-LAPACK/lapack

ご挨拶、

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テストに追加します。

最高、ミロ

Documentation

最も参考になるコメント

このバグは、DSTEMRで使用される分割基準に関連しており、対応するソースファイルの606行目から始まります(LAPACK 3.7.0のように)。 入力変数TRYRACに基づいて、サブルーチンDLARRRはINFO = 1を返し(これはDLARRRの予想される動作と矛盾するようです)、その後、入力として渡された(特定の)三重対角行列の有害な分割をトリガーします。 _DLARRRの機能を無視し、「分割基準の設定」の直前にIINFO = 0を設定すると、返されるベクトルは直交します。新しいバージョンのDLARRFを使用する場合は、問題100を参照してください。ただし、これはこのバグの適切な修正ではありません。 DLARRRの正しい動作を理解する必要があります。_)

全てのコメント10件

こんにちはミロ、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で言及されているフラグ変数を変更する前に、このケースがどのように動作したかを確認しましたか?

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

JHenneberg picture JHenneberg  ·  10コメント

Peter9606 picture Peter9606  ·  7コメント

christoph-conrads picture christoph-conrads  ·  26コメント

pablosanjose picture pablosanjose  ·  41コメント

5tefan picture 5tefan  ·  3コメント