1.2矩阵和向量的运算
1.介绍
eigen给矩阵和向量的算术运算提供重载的c++算术运算符例如+,-,*或这一些点乘dot(),叉乘cross()等等。对于矩阵类(矩阵和向量,之后统称为矩阵
类),算术运算只重载线性代数的运算。例如matrix1*matrix2表示矩阵的乘法,同时向量+标量是不允许的!如果你想进行所有的数组算术运算,请看下
一节!
2.加减法
因为eigen库无法自动进行类型转换,因此矩阵类的加减法必须是两个同类型同维度的矩阵类相加减。
这些运算有:
双目运算符:+,a+b
双目运算符:-,a-b
单目运算符:-,-a
复合运算符:+=,a+=b
复合运算符:-=,a-=b
例子:
#include #include
using namespaceEigen;intmain()
{
Matrix2d a;
a<< 1, 2,3, 4;
MatrixXd b(2,2);
b<< 2, 3,1, 4;
std::cout<< "a + b =\n" << a + b <<:endl>
std::cout<< "a - b =\n" << a - b <<:endl>
std::cout<< "Doing a += b;" <<:endl>
a+=b;
std::cout<< "Now a =\n" << a <<:endl>
Vector3d v(1,2,3);
Vector3d w(1,0,0);
std::cout<< "-v + w - v =\n" << -v + w - v <<:endl>
}
3.标量乘法和除法
标量的乘除法非常简单:
双目运算符:*,matrix*scalar
双目运算符:*,scalar*matrix
即乘法满足交换律
双目运算符:/,matrix/scalar
矩阵中的每一个元素除以标量
复合运算符:*=,matrix*=scalar
复合运算符:/=,matrix/=scalar
#include #include
using namespaceEigen;intmain()
{
Matrix2d a;
a<< 1, 2,3, 4;
Vector3d v(1,2,3);
std::cout<< "a * 2.5 =\n" << a * 2.5 <<:endl>
std::cout<< "0.1 * v =\n"