MatrixXd::Identity(rows,cols) //返回一个大小为 rows x cols 的单位矩阵(对角线元素为 1,其他元素为 0)。
C.setIdentity(rows,cols) //将C矩阵设置为rows x cols 的主对角元素为1的单位矩阵
MatrixXd::Zero(rows,cols) //设置rows x cols 的的零矩阵
C.setZero(rows,cols)
MatrixXd::Ones(rows,cols) //设置为全一rows x cols 矩阵
C.setOnes(rows,cols)
MatrixXd::Random(rows,cols) //返回一个大小为 rows x cols 的矩阵,矩阵中的每个元素是一个在 (-1, 1) 区间内均匀分布的随机数
C.setRandom(rows,cols)
VectorXd::LinSpaced(size,low,high) //返回一个包含 size 个元素的向量,元素在 low 和 high 之间线性均匀分布
v.setLinSpaced(size,low,high)
C.resize(rows,cols) //将C矩阵重新定义大小为rows x cols 的矩阵,但是假如其中C的大小不符合重新定义的矩阵将会出错,一般使用在动态定义矩阵中,如Matrix<double, 3, Dynamic> B;设置的是三行动态列数B双精度矩阵,
C.fill(num) //将矩阵C的数据全部改为num
Matrix3d A; //则是定义一个3*3的整型矩阵
Matrix<double, 3, 3, RowMajor> E //定义一个3*3的矩阵,使用行优先的存储序列,正常情况是列优先
Vector3f x, y, z; //等价于 Matrix<float, 3, 1>,定义了一个 3*1 的单精度浮点列向量,这里的f换为d就是表示的整型的矩阵
RowVector3f a, b, c; //定义了一个1*3的单精度行矩阵,当然改变数字的大小对应不同的向量
transpose(), conjugate(), adjoint()分别对应矩阵的转置矩阵,共轭矩阵,伴随矩阵,使用时也只需要在矩阵后面家“.transpose()”即可,如x.transpose()
R.diagonal(); //提取矩阵 R 的主对角线元素,返回一个包含对角线元素的向量
x.asDiagonal(); //将向量 x 转换为对角矩阵,即对角线上是向量 x 的元素,其余元素为 0
R.transpose().colwise().reverse(); //先对矩阵 R 进行转置,然后再对转置后的矩阵按列进行反转(从上到下交换元素),这相当于将矩阵逆时针旋转 90 度
matrix.block<p,q>(i,j); //这里的matrix可以是定义的任何矩阵,该代码表示从源矩阵的i行j列,取一个p行,q列的子矩阵
matrix.block(i,j,p,q); //和上面一样,只是不同表达形式,且源矩阵也不会发生改变
vector.head(n); //vector也可以是任何向量,表示获取向量的前n个元素
vector.tail(n); //获取向量尾部的n个元素:
vector.segment(i,n); //获取从向量的第i个元素开始的n个元素
P.leftCols<cols>() // 返回矩阵左侧开始的cols列
P.leftCols(cols) // 同上
P.middleCols<cols>(j) // 返回第j列开始的cols列
P.middleCols(j, cols) // 同上
P.rightCols<cols>() // 返回矩阵右侧开始的cols列
P.rightCols(cols) //
P.topRows<rows>() // 返回从顶部开始的rows行
P.topRows(rows) //
P.middleRows<rows>(i) // 返回从i行开始的rows列
P.middleRows(i, rows) //
P.bottomRows<rows>() // 返回从底部开始rows行
P.bottomRows(rows) //
P.topLeftCorner(rows, cols) // 返回矩阵 P 的左上角部分,大小为 rows x cols
P.topRightCorner(rows, cols) // 返回矩阵 P 的右上角部分,大小为 rows x cols
P.bottomLeftCorner(rows, cols) // 返回矩阵 P 的左下角部分,大小为 rows x cols
P.bottomRightCorner(rows, cols) // 返回矩阵 P 的右下角部分,大小为 rows x cols
P.topLeftCorner<rows,cols>() //
P.topRightCorner<rows,cols>() //
P.bottomLeftCorner<rows,cols>() //
P.bottomRightCorner<rows,cols>() //
R = P.cwiseProduct(Q); // 表示矩阵 P 和 Q 的逐元素相乘
R = P.array() * s.array();// 允许将矩阵 P 和标量 s 逐元素相乘。这里将 P 转换为数组模式
R = P.cwiseQuotient(Q); // 表示矩阵 P 和 Q 的逐元素相除
R = P.array() / Q.array();// 通过将 P 和 Q 转换为数组,进行逐元素相除
R = P.array() + s.array();// 将 P 和标量 s 逐元素相加
R = P.array() - s.array();// 将 P 和标量 s 逐元素相减
R.array() += s; // 将标量 s 加到 R 的每个元素上
R.array() -= s; // 将标量 s 从 R 的每个元素中减去
R.array() < Q.array(); // 返回布尔矩阵,逐元素比较 R 和 Q 的大小
R.array() <= Q.array(); // 返回布尔矩阵,逐元素比较 R 是否小于等于 Q
R.cwiseInverse(); // 计算矩阵 P 的逐元素倒数
R.array().inverse(); // 也计算逐元素倒数
R.array().sin() // 计算矩阵 P 的逐元素正弦值
R.array().cos() // 计算矩阵 P 的逐元素余弦值
R.array().pow(s) // 计算矩阵 P 每个元素的 s 次幂
R.array().square() // 计算矩阵 P 的逐元素平方
R.array().cube() // 计算矩阵 P 的逐元素立方
R.cwiseSqrt() // 计算矩阵 P 的逐元素平方根
R.array().sqrt() // 计算矩阵 P 的逐元素平方根
R.array().exp() // 计算矩阵 P 的逐元素指数
R.array().log() // 计算矩阵 P 的逐元素自然对数
R.cwiseMax(P) // 返回矩阵 R 和 P 中逐元素的最大值
R.array().max(P.array()) // 也返回逐元素的最大值
R.cwiseMin(P) // 返回矩阵 R 和 P 中逐元素的最小值
R.array().min(P.array()) // 也返回逐元素的最小值
R.cwiseAbs() // 计算矩阵 P 的逐元素绝对值
R.array().abs() // 计算矩阵 P 的逐元素绝对值
R.cwiseAbs2() // 也计算逐元素平方绝对值
R.array().abs2() // 也计算逐元素平方绝对值
(R.array() < s).select(P,Q); // 对于矩阵 R 的每个元素,如果小于标量 s,则取矩阵 P 对应的元素,否则取矩阵 Q 对应的元素
R.col(j1).swap(B.col(j2)); //将R矩阵的j1列与B矩阵的j2列交换
int r, c;
// Eigen //
R.minCoeff() // 返回矩阵中的最小值
R.maxCoeff() // 返回矩阵中的最大值
s = R.minCoeff(&r, &c) // 返回矩阵 R 中的最小元素 s,同时 r 和 c 记录该最小元素的行和列索引
s = R.maxCoeff(&r, &c) // 返回矩阵 R 中的最大元素 s,同时 r 和 c 记录该最大元素的行和列索引。
R.sum() // 返回矩阵 R 所有元素的和
R.colwise().sum() // 返回矩阵 R 的每列元素的和
R.rowwise().sum() // 返回矩阵 R 的每行元素的和
R.prod() // 返回矩阵 R 所有元素的乘积
R.colwise().prod() // 返回矩阵 R 每列元素的乘积
R.rowwise().prod() // 返回矩阵 R 每行元素的乘积
R.trace() // 返回矩阵 R 的迹(主对角线元素的和)
R.all() // 检查矩阵 R 的所有元素是否都为真(非零)
R.colwise().all() // 检查矩阵 R 每列是否所有元素都为真。
R.rowwise().all() // 检查矩阵 R 每行是否所有元素都为真。
R.any() // 检查矩阵 R 中是否有任意一个元素为真
R.colwise().any() // 检查矩阵 R 每列是否有任意一个元素为真。
R.rowwise().any() // 检查矩阵 R 每行是否有任意一个元素为真。
x.norm(); //返回向量x的2范数
x.squaredNorm(); //返回向量x的平方范数
x.dot(y); //计算两个向量 x 和 y 的点积
x.cross(y); //计算两个 3D 向量 x 和 y 的 叉积,结果是另一个与这两个向量都正交的向量。
求解线性方程组Ax=b
x = A.ldlt().solve(b)); // 分解适用于 对称正半定矩阵(即矩阵 A 具有非负特征值)。它分解为 A=LDLT,其中 L 是下三角矩阵,D 是对角矩阵
x = A.llt() .solve(b)); // 适用于 对称正定矩阵(即矩阵 A 的所有特征值都为正),分解为A=LLT,其中 L 是下三角矩阵。
x = A.lu() .solve(b)); // 适用于 任意矩阵。它将矩阵 A 分解为 A=LU,其中 L 是下三角矩阵,U 是上三角矩阵。此方法 稳定且快速。
x = A.qr() .solve(b)); // 将矩阵 A 分解为A=QR,其中 Q 是正交矩阵,R 是上三角矩阵。此方法不进行主元交换,适用于 非奇异矩阵
x = A.svd() .solve(b)); // 适用于 任意矩阵,尤其是 奇异或接近奇异的矩阵。将矩阵 A 分解为 A=UΣVT,其中 U 和 V 是正交矩阵,Σ 是对角矩阵
A.eigenvalues(); // 计算矩阵 A 的特征值,返回一个包含所有特征值的向量
EigenSolver<Matrix3d> eig(A); // 计算矩阵 A 的特征值和特征向量
eig.eigenvalues(); // 返回一个包含所有特征值的向量。
eig.eigenvectors(); // 返回一个矩阵,每列是对应的特征向量。
下面给出了求上面函数的代码式列
#include <Eigen/Dense>
#include <iostream>
int main() {
Eigen::Matrix3d A;
A << 4, -2, 1,
-2, 4, -2,
1, -2, 3;
Eigen::EigenSolver<Eigen::Matrix3d> eig(A);
std::cout << "Eigenvalues:\n" << eig.eigenvalues() << std::endl;
std::cout << "Eigenvectors:\n" << eig.eigenvectors() << std::endl;
return 0;
}