Eigen中的hello world程序
#include <iostream> //cpp控制台输入输出头文件
#include<Eigen/Dense> //加载Eigen中的Dense头文件,该头文件定义了数据类型MatrixXd的所有方法
using namespace Eigen;
int main()
{
MatrixXd m(2, 2); //声明一个矩阵m,设定行列长度
m(0, 0) = 3; //分别对矩阵中的元素进行赋值
m(1, 0) = 2.5;
m(0, 1) = -1;
m(1, 1) = m(1, 0) + m(0, 1); //通过已经赋值的元素经过算术运算来对新位置的元素赋值
std::cout << m << std::endl;
return 0;
}
程序说明:
运行结果如下:
Eigen矩阵的基本运算
#include <iostream>
#include<Eigen/Dense>
int main()
{
MatrixXd m = MatrixXd::Random(3, 3); //建立一个3*3的随机矩阵,每个元素的随机数范围为-1~1
cout << "m=" << endl << m << endl; //打印创建的随机矩阵与后面经过线性映射的对比
cout << "MatrixXd::Constant:" << endl << MatrixXd::Constant(3, 3, 1.2) << endl; //打印Constant方法的结果
m = (m + MatrixXd::Constant(3, 3, 1.2)) * 50; //MatrixXd::Constant(3, 3, 1.2)建立一个3*3的矩阵,所有的元素均为1.2
cout << "m=" << endl << m << endl;
VectorXd v(3); //建立一个三维向量
v << 1, 2, 3;
cout << "m*v=" << endl << m * v << endl;
}
程序说明:
运行结果如下:
在Eigen中所有的矩阵和向量都是矩阵模板类的对象,向量可以看做是特殊的矩阵。矩阵类有6个模板参数,目前我们一般只会使用前3个。
Eigen矩阵的变形
#include <iostream>
#include<Eigen/Dense>
int main()
{
MatrixXd m= MatrixXd::Random(3, 4); //使用随机化方法得到的指定行列数的矩阵
cout << "m: " << endl << m << endl;
m.resize(4, 3); //将矩阵变形,但是新旧矩阵的尺寸相等
cout << "m: " << endl << m << endl;
m.resize(5, 5); //将矩阵变形,但是新旧尺寸不相同
cout << "m: " << end; << m << endl;
cout << "The matrix m is of size"
<< m.rows() << "x" << m.cols() << endl;
cout << "It has" << m.size() << "cofficients" << endl;
VectorXd v(2);
v.resize(5);
cout << "The vector v is of size " << v.size() << endl;
cout << "As a matrix v is of size " << v.rows() << "x" << v.cols() << endl;
cout << v << endl;
return 0;
}
程序说明:
运行结果如下:
可以发现当矩阵变形前后如果矩阵的容量相同,变形只是将原来的数据的顺序做了改变,但是如果新旧矩阵容量不同,旧矩阵会被销毁,再按照新尺寸重建新的矩阵,向量同理。