犰狳:eigs_gen无法成功给出答案
Armadillo: eigs_gen can not successfully give answer
我正在使用犰狳的 eigs_gen 求稀疏矩阵的最小代数特征值,但 eigs_gen 无法给出答案。我测试了eigs_gen for eye matrix 6*6,也给不出答案。代码是:
#include <iostream>
#include <armadillo>
using namespace arma;
using namespace std;
int main(int argc, char** argv)
{
cout << "Armadillo version: " << arma_version::as_string() << endl;
sp_mat A = speye<sp_mat>(6, 6);
A.print("A:");
cx_vec eigval;
cx_mat eigvec;
eigs_gen(eigval, eigvec, A, 1, "sm", 1); // find 1 eigenvalues/eigenvectors
eigval.print("eigval:");
return 0;
}
答案是:
Armadillo version: 6.100.0 (Midnight Blue)
A:
[matrix size: 6x6; n_nonzero: 6; density: 16.67%]
(0, 0) 1.0000
(1, 1) 1.0000
(2, 2) 1.0000
(3, 3) 1.0000
(4, 4) 1.0000
(5, 5) 1.0000
*** Error in `./test': double free or corruption (out): 0x00007fff38dd6910 ***
Aborted (core dumped)
然而,当眼睛矩阵为5*5时,可以得到正确的答案。
代码是:
#include <iostream>
#include <armadillo>
using namespace arma;
using namespace std;
int main(int argc, char** argv)
{
cout << "Armadillo version: " << arma_version::as_string() << endl;
sp_mat A = speye<sp_mat>(5, 5);
A.print("A:");
cx_vec eigval;
cx_mat eigvec;
eigs_gen(eigval, eigvec, A, 1, "sm", 1); // find 1 eigenvalues/eigenvectors
eigval.print("eigval:");
return 0;
}
答案是:
Armadillo version: 6.100.0 (Midnight Blue)
A:
[matrix size: 5x5; n_nonzero: 5; density: 20.00%]
(0, 0) 1.0000
(1, 1) 1.0000
(2, 2) 1.0000
(3, 3) 1.000
(4, 4) 1.0000
eigval:
(+1.000e+00,+0.000e+00)
我的编译命令是:
g++ test.cpp -o test -O2 -I/usr/local/include/armadillo -L/usr/local/lib -DARMA_DONT_USE_WRAPPER -larpack -llapack -lblas -lf2c -lgfortran
我正在开发 ubuntu 14.04LTS。
我已经找到解决这个问题的办法了。原因是libopenblas、liblapack、libarpack是我自己编译的,都是打包成静态库的。当它们一起使用时,就出现了这个问题。
解决方案是通过下面列出的命令安装这些包。
sudo apt-get 安装 libopenblas-dev
sudo apt-get 安装 liblapack-dev
sudo apt-get install libarpack2-dev
我正在使用犰狳的 eigs_gen 求稀疏矩阵的最小代数特征值,但 eigs_gen 无法给出答案。我测试了eigs_gen for eye matrix 6*6,也给不出答案。代码是:
#include <iostream>
#include <armadillo>
using namespace arma;
using namespace std;
int main(int argc, char** argv)
{
cout << "Armadillo version: " << arma_version::as_string() << endl;
sp_mat A = speye<sp_mat>(6, 6);
A.print("A:");
cx_vec eigval;
cx_mat eigvec;
eigs_gen(eigval, eigvec, A, 1, "sm", 1); // find 1 eigenvalues/eigenvectors
eigval.print("eigval:");
return 0;
}
答案是:
Armadillo version: 6.100.0 (Midnight Blue)
A:
[matrix size: 6x6; n_nonzero: 6; density: 16.67%]
(0, 0) 1.0000
(1, 1) 1.0000
(2, 2) 1.0000
(3, 3) 1.0000
(4, 4) 1.0000
(5, 5) 1.0000
*** Error in `./test': double free or corruption (out): 0x00007fff38dd6910 ***
Aborted (core dumped)
然而,当眼睛矩阵为5*5时,可以得到正确的答案。
代码是:
#include <iostream>
#include <armadillo>
using namespace arma;
using namespace std;
int main(int argc, char** argv)
{
cout << "Armadillo version: " << arma_version::as_string() << endl;
sp_mat A = speye<sp_mat>(5, 5);
A.print("A:");
cx_vec eigval;
cx_mat eigvec;
eigs_gen(eigval, eigvec, A, 1, "sm", 1); // find 1 eigenvalues/eigenvectors
eigval.print("eigval:");
return 0;
}
答案是:
Armadillo version: 6.100.0 (Midnight Blue)
A:
[matrix size: 5x5; n_nonzero: 5; density: 20.00%]
(0, 0) 1.0000
(1, 1) 1.0000
(2, 2) 1.0000
(3, 3) 1.000
(4, 4) 1.0000
eigval:
(+1.000e+00,+0.000e+00)
我的编译命令是:
g++ test.cpp -o test -O2 -I/usr/local/include/armadillo -L/usr/local/lib -DARMA_DONT_USE_WRAPPER -larpack -llapack -lblas -lf2c -lgfortran
我正在开发 ubuntu 14.04LTS。
我已经找到解决这个问题的办法了。原因是libopenblas、liblapack、libarpack是我自己编译的,都是打包成静态库的。当它们一起使用时,就出现了这个问题。 解决方案是通过下面列出的命令安装这些包。 sudo apt-get 安装 libopenblas-dev sudo apt-get 安装 liblapack-dev sudo apt-get install libarpack2-dev