1.?Matrix
?類(稠密矩陣)
模板參數
cpp
Matrix<Scalar, Rows, Cols, Options, MaxRows, MaxCols>
-
Scalar
: 元素類型(如?float
,?double
,?int
)。 -
Rows
/Cols
: 行數和列數(Dynamic
?表示動態大小)。 -
Options
: 存儲順序(RowMajor
?或?ColMajor
,默認?ColMajor
)。 -
MaxRows
/MaxCols
: 動態矩陣的最大尺寸(可選)。
常用屬性
屬性 | 說明 | 示例 |
---|---|---|
RowsAtCompileTime | 編譯時行數(Dynamic ?為 -1) | Matrix3f::RowsAtCompileTime == 3 |
ColsAtCompileTime | 編譯時列數 | MatrixXd::ColsAtCompileTime == Dynamic |
SizeAtCompileTime | 元素總數(行×列) | Vector4d::SizeAtCompileTime == 4 |
核心方法
方法 | 參數說明 | 返回值/功能 | 示例 |
---|---|---|---|
rows() ,?cols() ,?size() | 無 | 返回當前行數、列數、元素總數 | A.rows() |
operator()(i,j) | i : 行索引,j : 列索引 | 訪問或修改元素 | A(1,2) = 5; |
setZero() | 無 | 將矩陣置零 | A.setZero(); |
setIdentity() | 無 | 設置為單位矩陣 | B.setIdentity(); |
transpose() | 無 | 返回轉置矩陣(視圖) | MatrixXd C = A.transpose(); |
sum() ,?mean() | 無 | 所有元素的和/平均值 | double s = A.sum(); |
col(j) ,?row(i) | j : 列索引,i : 行索引 | 返回列/行向量(視圖) | Vector3d v = A.col(0); |
resize(rows, cols) | 動態矩陣調整大小 | 無(修改自身) | A.resize(5, 5); |
2.?Vector
?類(列向量)
說明
-
本質是?
Matrix<Scalar, Size, 1>
?的別名(列數為 1)。 -
常用別名:
-
Vector2f
,?Vector3d
: 固定大小向量。 -
VectorXf
: 動態大小向量(X
?表示動態)。
-
特有方法
方法 | 參數說明 | 功能 | 示例 |
---|---|---|---|
dot(v) | v : 同類型向量 | 點積 | double d = v1.dot(v2); |
cross(v) | v : 3D 向量 | 叉積(僅 3D 向量) | Vector3f v3 = v1.cross(v2); |
normalize() | 無 | 向量歸一化(修改自身) | v.normalize(); |
norm() | 無 | 返回向量的 L2 范數 | double len = v.norm(); |
3.?Array
?類(逐元素操作)
說明
-
與?
Matrix
?類似,但用于逐元素運算(如?+
,?*
,?sin()
)。 -
模板參數同?
Matrix
,常用別名:-
Array33f
: 3x3 浮點數組。 -
ArrayXXd
: 動態大小數組。
-
特有方法
方法 | 參數說明 | 功能 | 示例 |
---|---|---|---|
cwiseProduct(arr) | arr : 同類型數組 | 逐元素乘法 | C = A.cwiseProduct(B); |
cwiseQuotient(arr) | arr : 同類型數組 | 逐元素除法 | D = A.cwiseQuotient(B); |
abs() ,?sqrt() | 無 | 逐元素絕對值/平方根 | B = A.abs(); |
exp() ,?log() | 無 | 逐元素指數/對數 | C = A.exp(); |
4. 初始化方式
方法 | 示例 | 說明 |
---|---|---|
逗號初始化 | Matrix3f A; A << 1,2,3, 4,5,6, 7,8,9; | 按行填充元素 |
構造函數 | Vector4d b(1.0, 2.0, 3.0, 4.0); | 直接初始化 |
特殊矩陣 | MatrixXd::Random(3,3); | 隨機矩陣 |
Matrix3d::Identity(); | 單位矩陣 |
5. 代碼示例
cpp
#include <Eigen/Dense>
using namespace Eigen;// 初始化矩陣和向量
Matrix3d A;
A << 1, 2, 3, 4, 5, 6, 7, 8, 9;
Vector3d b(1, 2, 3);// 矩陣運算
Matrix3d B = A.transpose();
double dot_product = b.dot(Vector3d::Ones());
ArrayXXd C = A.array().sqrt(); // 逐元素平方根// 解線性方程組
Vector3d x = A.colPivHouseholderQr().solve(b);
關鍵區別
特性 | Matrix | Array |
---|---|---|
用途 | 線性代數運算(矩陣乘法) | 逐元素運算(數學函數) |
運算符?* | 矩陣乘法 | 逐元素乘法 |
通過?array()
?和?matrix()
?方法可互相轉換:
cpp
MatrixXd M = A.array() * B.array(); // 錯誤!需顯式轉換
MatrixXd M = (A.array() * B.array()).matrix(); // 正確