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;
}
程序說明:
運行結果如下:
可以發現當矩陣變形前後如果矩陣的容量相同,變形只是將原來的數據的順序做了改變,但是如果新舊矩陣容量不同,舊矩陣會被銷燬,再按照新尺寸重建新的矩陣,向量同理。
固定尺寸的矩陣與動態矩陣區別
一般來說對於小型矩陣使用固定尺寸矩陣,如果矩陣的尺寸小於16使用固定尺寸性能較好,如果矩陣尺寸大於32使用動態尺寸較好。