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