c++ - 问题与 eigs_sym 获取具有最小幅度的特征值

标签 c++ qt armadillo

我正在尝试获取有限数量的平方对称矩阵的最小量值的特征值。 为此,我首先使用 Armadillo 文档中的示例 (http://arma.sourceforge.net/docs.html#eigs_sym):

sp_mat A = sprandu<sp_mat>(1000, 1000, 0.1);
sp_mat B = A.t()*A;
arma::vec eigval;
mat eigvec;
eigs_sym(eigval, eigvec, B, 10, "sm");//i add "sm" to get the eigen-  
                                      //values of smallest magnitude
cout<<eigval<<endl; 

这里我得到一个错误,说 ddcomposition 失败 [无法收敛]。

但是,当我这样调用 eigs_sym 时:

eigs_sym(eigval, eigvec, B, 10); //obtain the eigen-values with 
                                 //LARGEST magnitude (default call)

这个工作很好,我得到了预期的结果:

1.1596e+02
1.1680e+02
1.1785e+02
1.1815e+02
1.1927e+02
1.2017e+02
1.2108e+02
1.2256e+02
1.2323e+02
2.5413e+03

我在 Ubuntu 操作系统上,这是我的 .pro 文件 (Qt):

 LIBS += -lgsl -lgslcblas -lX11 -lpthread -llapack  -lm -fopenmp   
         -larmadillo

有解决这个问题的想法吗?

谢谢

最佳答案

我通过选择更多的特征值来提取来解决这个问题。 显然,要提取的特征值数量较少会使特征求解器注意收敛。如果你更换

eigs_sym(eigval, eigvec, B, 10,"sm")

eigs_sym(eigval, eigvec, B, 100,"sm")

这会起作用。

关于c++ - 问题与 eigs_sym 获取具有最小幅度的特征值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36059755/

相关文章:

c++ - qt form fullscreen 有时会越过 ubuntu 顶部 Pane ,有时不会

c++ - Armadillo - 如何提取行?

c++ - Armadillo : Can not find clapack. h

c# - C++ x86/x64 结构对齐 + .NET AnyCPU C++ 库使用(调用/回调)

c++ - 如何重命名 boost 属性树中的节点/元素?

c++ - SwitchDesktop 暂时工作,但片刻后切换回来

c++ - QT 5 给设计器添加继承自QGraphicsView的自定义widget

c++ - 错误 :conversion from 'QFont' to non-scalar type 'QFontMetricsF' requested-Qt

c++ - 什么是 Armadillo+Atlas、Armadillo+OpenBLAS、Armadillo+uBLAS、Armadillo+MKL?

c++ - 在 C++ 项目中设置 R (C api)