前言
C++以其及其优异的计算速度在科学计算、工业工程等领域得到广泛的应用,在数值计算方面,调用矩阵库能简化编程过程,提高计算速度,下面介绍几种常用的矩阵库及其用法,此外,我也写了一个矩阵库在自己科研分析中C++矩阵库(2)。
Eigen
Eigen是采用C++模板技术编写的纯头文件库,用法如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <iostream> #include <Eigen/Dense> int main() { Eigen::MatrixXd mat(3, 4); for (int i = 0; i != 3; ++i) { for (int j = 0; j != 4; ++j) { mat(i, j) = 3*i+5*j; } } std::cout << mat << std::endl; }
|
Armadillo
Armadillo的语法与Matlab语法很相识,从Matlab迁移到Armadillo很方便,用法如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <iostream> #include <Armadillo> int main() { arma::mat A(3, 4); for (int i = 0; i != 3; ++i) { for (int j = 0; j != 4; ++j) { A(i, j) = 3*i+5*j; } } A.print("A:"); }
|
Boost
Boost在C++中地位非常高,被称为C++的准标准库,其中的ublas模块包含矩阵类,用法如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/io.hpp> #include <iostream> namespace ublas = boost::numeric::ublas; int main() { ublas::matrix<double> A(3, 3); for (unsigned i = 0; i < A.size1(); ++i) for (unsigned j = 0; j < A.size2(); ++j) A(i, j) = 3*i + j; std::cout << A << std::endl; return 0; }
|