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 - bug 126),您正在处理这个讨厌的错误,对吗?

ii) 免费参加这个特定的向量正交性测试 (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条评论

嗨 Miro,感谢您将 BUG 126 添加为 GitHub 问题。 这很棒。 Osni ( @oamarques ) 正在研究#100。 感谢您与我们分享您的测试代码。 是的,有计划为 LAPACK 开发一个新的测试套件,欢迎任何讨厌的矩阵。 Osni 有许多这样的矩阵,目标是增加这些矩阵的集合,以及用于测试的基础设施。 无论如何,感谢您将 BUG 126 添加为 GitHub 问题。 这很棒。 干杯,朱利安。

此错误与 DSTEMR 中使用的拆分标准有关,从相应源文件的第 606 行开始(如在 LAPACK 3.7.0 中)。 基于输入变量 TRYRAC,子例程 DLARRR 返回 INFO=1(这似乎与 DLARRR 的预期行为相矛盾),这随后触发了作为输入传递的(特定)三对角矩阵的有害分裂。 _如果我们忽略 DLARRR 所做的并在“设置拆分标准”之前设置 IINFO=0,则返回的向量是正交的,当使用新版本的 DLARRF 时,请参阅问题 100。但是,这不是对这个错误的正确修复:我们需要弄清楚 DLARRR 的正确行为应该是什么。_)

嗨,关于解决这个错误的任何消息?

@oamarques使用 DSTEGR 而不是底层 DSTEMR 是否可以缓解此问题?

@uihsnv :好问题。 STEGR 不再维护。 它有问题。 我们只致力于和维护 STEMR。 但是,是的,看看 STEGR 在这个问题上做了什么是个好主意。

@langou哦! 我不知道!! 我在我的代码中使用了几个 STEGR 实例。 我应该改用 STEMR 吗?

此外,我对@miroi共享的测试进行了一些修改,如果他接受,您可以看到差异。

我在我的代码中使用了几个 STEGR 实例。 我应该改用 STEMR 吗?

我想是这样。 我希望@oamarques能尽快与我们一起跟进此事。

此外,我对@miroi共享的测试进行了一些修改,如果他接受,您可以看到差异。

@oamarques分享修改后的测试会很棒

你好,有关于这个bug的消息吗? 为什么它被标记为“文档”?

尽管如此,新鲜的 lapack 还是会出现这个错误(用 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评论

weslleyspereira picture weslleyspereira  ·  5评论

Dichloromethane picture Dichloromethane  ·  11评论

christoph-conrads picture christoph-conrads  ·  26评论

Peter9606 picture Peter9606  ·  7评论