【正文】
元素所組成的臨時(shí)新矩陣對(duì)象,原矩陣的元素不變。Nowsu*()u^T*mat:\nHere7. matmain()Eigen/Denseendl。Here4. coutmatrixendl。Hereview plaincopy1. MatrixXcf可以通過=\nv(1,2,3)。1,5. {3. using例如:二元操作符*在:A*a中表示矩陣A中的每隔元素都與數(shù)字a相乘,結(jié)果放在一個(gè)臨時(shí)矩陣中,矩陣的值不會(huì)改變。va=\n4。2,namespace組合操作法+=或者=表示(對(duì)應(yīng)每隔元素都做相應(yīng)操作):A += B 或者 A=B代碼段1為矩陣的加減操作,代碼如下:[cpp]5. std::coutb(3,3)。xa(3) 使用“=”操作符操作動(dòng)態(tài)矩陣時(shí),如果左右邊的矩陣大小不等,則左邊的動(dòng)態(tài)矩陣的大小會(huì)被修改為右邊的大小。tmp_B。++i。28. 25. =i。=i。21. pSrc[i][j]{17. {=0,9. iHeightifiHeight)4. m_matrix_B。4. 7,1,設(shè)置矩陣的元素在Eigen中重載了操作符,通過該操作符即可以一個(gè)一個(gè)元素的進(jìn)行賦值,也可以一塊一塊的賦值。v15. std::cout12. VectorXdmatrixm(0,1)。=3。5. {3. using矩陣元素的訪問可以通過()操作符完成,例如m(2,3)即是獲取矩陣m的第2行第3列元素(注意行列數(shù)從0開始)。endlm8. m6. {4. using2. includev(3)。endl50。main()iostream,2. Vector3dMatrixXd。_MaxColsint ()。()。_Scalar,_MaxRows,_Cols,其前三個(gè)參數(shù)分別表示矩陣元素的類型,行數(shù)和列數(shù)。)。動(dòng)態(tài)矩陣和靜態(tài)矩陣動(dòng)態(tài)矩陣是指其大小在運(yùn)行時(shí)確定,靜態(tài)矩陣是指其大小在編譯時(shí)確定,在Eigen中并未這樣稱呼矩陣。3. usingm+m1,*vview plaincopy1. includeEigen。5. intMatrix3d::Random()。*10. Vector3dv2. include4. int=Herestd::endl。=1。vector16. }5,5. std::cout=1。intiWidthfalse。=VectorXfMatrixXf19. pSrc[i][j]=*j。m_Vector_A重置矩陣大小當(dāng)前矩陣的行數(shù)、列數(shù)、大小可以通過rows(),cols()和size()來獲取,對(duì)于動(dòng)態(tài)矩陣可以通過resize()函數(shù)來動(dòng)態(tài)修改矩陣的大小.需注意:(1)b。of()BC;一元操作符表示對(duì)矩陣取負(fù)(矩陣中對(duì)應(yīng)元素取負(fù),返回一個(gè)臨時(shí)矩陣):Eigen/Densemain()7. a3,aba+w2. include4. intavvNow v =246需要注意:在Eigen中,算術(shù)操作例如 “操作符+”并不會(huì)自己執(zhí)行計(jì)算操作,他們只是返回一個(gè)“算術(shù)表達(dá)式對(duì)象”,而實(shí)際的計(jì)算則會(huì)延遲到后面的賦值時(shí)才進(jìn)行。adjointInPlace()Hereendl。conjugateiostreammat。8. 3,mat*u:\n()*vis15. std::coutmats multiply mat by itselfNow mat is mat: 7 1015 22本節(jié)主要涉及Eigen的塊操作以及QR分解矩陣的塊操作1)矩陣的塊操作有兩種使用方法,其定義形式為:[cpp](1)10. 13,14,15,16。middlei++i)sizeendlEigen/Densem(3,3)。theendl。3addingthird14. cout 3. using5. {1,8. cout3()endl239。, v =1468106QR分解2. {5. 2,1,1,11. ()。std::endlstd::coutstd::coutstd::endl。6. 7. VectorXfS*C[3]。=22. 盤符:\VS2010\vs_2010\VC\include然后就可以新建項(xiàng)目了,新建項(xiàng)目后,可以用:[cpp]維基百科 d 39。view plaincopyprint?1. MatrixXfv1。//5. coutm3_2=\nm3endl。5. m3,4,8,為了美觀點(diǎn),更像個(gè)矩陣,可以換行寫0,2。view plaincopyprint?1. span矩陣全部元素置05. coutm1_2=\nm1endl。隨機(jī)生成一個(gè)矩陣12. ,()。23. 數(shù)26. // Fixed rows and cols. Same as Matrix3d.Matrixdouble, 3, Dynamic B。 // Dynamic column vector of doubles// Eigen // Matlab // ments() // length(x) // vector size() // size(C,1) // number of rows() // size(C,2) // number of columnsx(i) // x(i+1) // Matlab is 1basedC(i,j) // C(i+1,j+1) // only dynamic cols changed. A 1, 2, 3, // Initialize A. The elements can also be 4, 5, 6, // matrices, which are stacked along cols 7, 8, 9。s swap function which is highly optimized.// Eigen // Matlab(i) = (j)。t have *= style operators.// Matrixvector. Matrixmatrix. Matrixscalar.y = M*x。 R = P/s。 // R = P .* QR = () * ()。 // R Q() = ()。 [r, c] = ind2sub(size(R), i)。)39。 // A sym. . include Eigen/Choleskyx = () .solve(b))。 // diag(val)()。 // Stable and fast. include Eigen/LUx = () .solve(b))。t work in Eigen.() // dot(x, x) Note the equivalence is not true for plex(y) // dot(x, y)(y) // cross(x, y) Requires include Eigen/GeometryEigen 矩陣類型轉(zhuǎn)換//// Type conversion// Eigen // Matlabdouble()。r, amp。 // 1 ./ P().inverse()。 // R = P ./ QR = () / ()。 R = s*P。 R = P*s。 // R(:, [j1 j2]) = R(:, [j2, j1])Eigen 矩陣轉(zhuǎn)置// Views, transpose, etc。 // B is three horizontally stacked A39。 // Runtime error if assertions are on.(4, 9)。 // Full dynamic. Same as MatrixXd.Matrixdouble, 3, 3, RowMajor E。=矩陣21. 矩陣求逆,1,1coutm1_4=\nm1endl。10. 若填寫,則矩陣也會(huì)更改為填寫的行列值3. 5. m3,4,8,6. 3. coutm3_1\nendl。誰讓它是動(dòng)態(tài)的呢?!那么,你肯定會(huì)說,定義的時(shí)候聲明行列干啥?因?yàn)?,下種方法初始化,就需要行列值了:[cpp]3. coutm3_1=\nm3endl。運(yùn)行出來效果:進(jìn)一步,測(cè)試一下:[cpp]m2(3,3)。 f 39?!猀RQR分解求解,三種方法:HouseholderQR、ColPivHouseholderQR、FullPivHouseholderQR——Eigenvalues特征值和特征向量分解的方法:EigenSolver、SelfAdjointEigenSolver、ComplexEigenSolver——Sparse稀疏矩陣相關(guān)類,對(duì)于稀疏矩陣的存儲(chǔ)及相關(guān)基本線性代數(shù)——Dense包含: Core、Gelometry、LU、Cholesky、SVD、QR和Eigenvalues模塊(頭文件)——Eigen包含上述所有的模塊(頭文件)Eigen提供了兩種密集的對(duì)象Matrix(矩陣)和