文章目录
- Armadillo
- 安装
- 入门案例
- 直接赋值
- 切片
- 常用函数
Armadillo
安装
Armadillo是一个具有Matlab风格的线性代数包。下载之后解压到任意文件夹,然后对VS工程进行设置。
- 菜单栏生成->配置管理器,将平台改为x64
- 右键项目名称->属性(快捷键Shift+F4),编辑VC++目录。将**…\armadillo-9.900.5\examples\lib_win64这个文件夹的绝对路径添加到包含目录和库目录**中。
- 点击C/C++->常规,将**…\armadillo-9.900.5\include这个文件夹的绝对路径添加到附加包含目录**中。
- 点击链接器->常规,将**\armadillo-9.900.5\examples\lib_win64文件夹的绝对路径添加到附加库目录**中。
- 选择链接器->输入,将lib_win64中的两个文件blas_win64_MT.lib和lapack_win64_MT.lib添加到附加依赖项中
- 配置完成后,将**\armadillo-9.900.5\examples\lib_win64**下的dll文件复制到新建项目的debug文件夹下。
入门案例
mat
格式是Armadillo中最基础的矩阵格式,其赋值方法如下代码所示。
#include <iostream>
#include <armadillo> //armadillousing namespace std;
using namespace arma; //armadillo的命名空间int main(){mat A(2, 3); //可建立2行3列的矩阵cout << A.n_rows << endl; // 输出为2cout << A.n_cols << endl; // 输出为3A(1,2)=15; //第1行第2个数赋值为15A = 5.0; //将A变为1X1的矩阵,其值为5A.set_size(4, 5); //重新设置矩阵的行列数A.fill(5.0); //将A的所有值都置为5.0A.print("A:");system("pause");return 0;
}
最后的A.print("A:");
语句得到
A:
5.0000 5.0000 5.0000 5.0000 5.0000
5.0000 5.0000 5.0000 5.0000 5.0000
5.0000 5.0000 5.0000 5.0000 5.0000
5.0000 5.0000 5.0000 5.0000 5.0000
请按任意键继续. . .
直接赋值
此外,矩阵可直接赋值,每行元素用<<
间隔,每行结尾用endr
区分。对于已经建立的矩阵,可以非常方面地求行列式与逆矩阵,并提供了保存功能。案例如下
int main(){mat A();//为矩阵A赋值A << 0.165300 << 0.454037 << 0.995795 << 0.124098 << endr<< 0.688782 << 0.036549 << 0.552848 << 0.937664 << endr<< 0.348740 << 0.479388 << 0.506228 << 0.145673 << endr<< 0.148678 << 0.682258 << 0.571154 << 0.874724 << endr;cout << det(A) << endl; //计算行列式cout << inv(A) << endl; //计算逆矩阵A.save("A.txt", raw_ascii); //存储矩阵system("pause");
}
其结果为
0.227747 //此为矩阵行列式的值,下面是逆矩阵-1.0136 0.7210 2.3596 -1.0220-0.9098 -0.9106 1.8929 0.78991.6083 0.2419 -1.1112 -0.3025-0.1682 0.4297 -1.1519 0.8983
请按任意键继续. . .
切片
int main(){mat B;B.load("A.txt"); //加载刚刚存储的矩阵cout << B(span(0, 2), span(3, 4)) << endl;cout << B(0, 3, size(3, 2)) << endl;//起始点为(0,3),尺寸为3X2cout << B.row(0) << endl; //第0行cout <<B.col(1) << endl; //第1列
}
常用函数
一些常用的函数如下表所示,其逻辑与Matlab/Octave是十分相似的,对于矩阵A
而言
表达式 | 功能 | Octave语法 |
---|---|---|
A.t() | 转置 | a’ |
det(A) | 行列式 | det(A) |
inv(A) | 逆矩阵 | inv(A)或A^(-1) |
max(A) | 按列取最大值 | max(A) |
max(A,1) | 按行取最大值 | max(A,1) |
max(max(A)) | 最大值 | max(max(A)) |
sum(A) | 按列求和 | sum(A) |
sum(A,1) | 按行求和 | sum(A,1) |
accu(A) | 求和 | sum(sum(A)) |
trace(A) | 求A的迹 | trace(A) |
其中粗体为与Matlab不同者。