Eigen入门之密集矩阵 2-- Matrix及Vector的计算方法

本文深入探讨了Eigen库中矩阵和向量的运算,包括加减乘除、转置、共轭、点乘和叉乘等操作,以及矩阵与向量的乘法,同时还介绍了算数分解操作如求和、乘积、最大最小值等。

简介

Eigen内的Matrix和Vector提供了类似C++的运算符,如+,-,*;也提供了编程的函数方法,如点乘和叉乘的dot(), cross(),如此等等。

在Eigen的Matrix类,代表矩阵matrics和向量vector,重载的运算符仅用于支持线性代数的运算,而不支持标量计算。比如matrix1 * matrix2,表示矩阵matrix 乘以 matrix2,而matrix1 + 10则不允许。

加法和减法

如大家所知,如果2个矩阵运行运算,对2个矩阵的行数和列数是有条件要求的。另外,在Eigen内,用于计算时,矩阵的系数类型必须统一,并不会内部进行类型转换。

二元运算符 + : ma + mb;

二元运算符 - : ma - mb;

一元运算符 - : - ma;

组合运算符 +=: ma+=mb;

组合运算符 -=: ma-=mb;

示例:

// matrix_cal1.cpp
#include <iostream>
#include <Eigen/Dense>

using namespace Eigen;

int main()
{
   
   
  Matrix2d a;
  a << 1, 2,
       3, 4;

  MatrixXd b(2,2);
  b << 5, 6,
       7, 8;

  std::cout << "a + b =\n" << a + b << std::endl;
  std::cout << "a - b =\n" << a - b << std::endl;
  std::cout << "Doing a += b;" << std::endl;
  a += b;
  std::cout << "Now a =\n" << a << std::endl;

  std::cout << endl;
  Vector3d v(1,2,3);
  Vector3d w(1,0,0);
  std::cout << "-v + w - v =\n" << -v + w - v << std::endl;
}

执行后输出:

$ ./matrix_cal1 
a + b =
 6  8
10 12
a - b =
-4 -4
-4 -4
Doing a += b;
Now a =
 6  8
10 12
-v + w - v =
-1
-4
-6

与标量的乘、除

与标量的乘法和除法计算是支持的,重载的操作符如下:

二元运算符 * : matrix * scalar;

二元运算符 * : scalar * matrix;

二元运算符 / : matrix / scalar;

组合运算符 *=: matrix *= scalar;

组合运算符 /=: matrix /= scalar;

示例:

// matrix_cal2.cpp
#include <iostream>
#include <Eigen/Dense>

using namespace Eigen;

int main()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值