C++矩阵库

前言

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;
}


C++矩阵库
https://ting2938.github.io/程序设计/C++/C-矩阵库/
作者
TING2938
发布于
2020年5月20日
许可协议