Eigen之矩阵与向量的乘积
Eigen学习之矩阵与向量的乘积
摘要:
C++狗做论文实现的时候尝尝会遇到矩阵的计算,而矩阵的计算如果自己去写工具那就太麻烦了。在众多的工具中(反正我也不知道其他工具),EIGEN库最令人青睐。原因无他,懒得去造轮子。
Eigen的学习之路很长,在这条路中,首先要掌握基础知识:http://blog.csdn.net/augusdi/article/details/12907341。
那么你现在兴匆匆的跑去用这个库写代码那么这里面的一些小陷阱一定要注意。
正文
这篇文章摘要比正文还长这是可能的。
在Eigen中处理向量时是将向量看成是特殊的矩阵,也就是1*N的矩阵。不过在线性代数中我们也经常讲矩阵分解成一个一个向量来处理,比如一个N*N的矩阵可以用N个N*1的列向量来表示。
Eigen中处理向量也是这种思路。在初始化VectorXd k(x);时,在系统中实际上创建的是一个Matrix<double ,x,1,0,x,1>。不知道你有没有注意,在我们理想状态下创建的Vector应该是一个1*x的行向量,但实际上在创建时创建的是x*1的列向量。如果你直接将VectorXd k(n) * Matrix<double,n,n>那么你将会得到一大堆错误而不是结果。
正确处理这个问题应该是先将向量转置后再计算:k.transpose()*Matrix<double,n,n>那么就会得到一个1*n的向量。
这是陷阱一,而这个陷阱却很常遇到。
THISSKY 出品,原文链接:http://www.cnblogs.com/zhuhongjongy/p/5419421.html