常见的矩阵操作记录,主要是Eigen库的矩阵操作,包括矩阵的矩阵加法和减法、乘法、矩阵的转置、矩阵的求逆、矩阵的迹、矩阵的迹、矩阵的求和
Eigen::Matrix<数据类型, 行数, 列数> 数据类型;
举例应用: Eigen::Matrix matrix_33;
Matrix3d // 3行3列的double类型矩阵
举例应用: Eigen::Matrix3d matrix_33 = Eigen::Matrix3d::Zero();
动态设置Eigen矩阵类型大小的方法:
Eigen::Matrix<数据类型, Eigen::Dynamic, Eigen::Dynamic> 数据类型;
举例应用: Eigen::Matrix matrix_dynamic;
另一种设置动态大小的方法:
举例应用: Eigen::MatrixXd matrix_dynamic;
举例代码如下所示:
#include
#include
int main() {
// 创建两个3x3的矩阵
Eigen::Matrix3d A;
Eigen::Matrix3d B;
// 初始化A和B
A << 1, 2, 3,
4, 5, 6,
7, 8, 9;
B << 9, 8, 7,
6, 5, 4,
3, 2, 1;
// 输出矩阵A和B
std::cout << "Here is the matrix A:\n" << A << std::endl;
std::cout << "Here is the matrix B:\n" << B << std::endl;
// 矩阵加法
Eigen::Matrix3d C = A + B;
std::cout << "A + B = " << C << std::endl;
// 矩阵减法
Eigen::Matrix3d D = A - B;
std::cout << "A - B = " << D << std::endl;
// 复制矩阵A到矩阵E
Eigen::Matrix3d E = A;
std::cout << "A copied to E = " << E << std::endl;
// 复制矩阵B到矩阵F
Eigen::Matrix3d F = B;
std::cout << "B copied to F = " << F << std::endl;
return 0;
}
输出结果:
Here is the matrix A:
1 2 3
4 5 6
7 8 9
Here is the matrix B:
9 8 7
6 5 4
3 2 1
A + B = 10 10 10
10 10 10
10 10 10
A - B = -8 -6 -4
-2 0 2
4 6 8
A copied to E = 1 2 3
4 5 6
7 8 9
B copied to F = 9 8 7
6 5 4
3 2 1
举例应用代码如下所示:
#include
#include
int main() {
// 创建两个矩阵
Eigen::Matrix3d A;
Eigen::Matrix3d B;
// 初始化A和B
A << 1, 2, 3,
4, 5, 6,
7, 8, 9;
B << 9, 8, 7,
6, 5, 4,
3, 2, 1;
// 矩阵乘法
Eigen::Matrix3d C = A * B;
std::cout << "A * B = " << C << std::endl;
return 0;
}
输出结果:
A * B = 30 24 18
84 69 54
138 114 90
举例应用代码如下所示:
#include
#include
int main() {
// 创建一个矩阵
Eigen::Matrix3d A;
// 初始化矩阵A
A << 1, 2, 3,
4, 5, 6,
7, 8, 9;
// 矩阵的转置
Eigen::Matrix3d A_transpose = A.transpose();
std::cout << "A^T = " << A_transpose << std::endl;
return 0;
}
输出结果:
A^T = 1 4 7
2 5 8
3 6 9
举例应用代码如下所示:
#include
#include
int main() {
// 创建一个矩阵
Eigen::Matrix3d A;
// 初始化矩阵A
A << 2, 1, 1,
9, 8, 5,
1, 1, 2;
// 矩阵的逆
Eigen::Matrix3d A_inverse = A.inverse();
std::cout << "A^(-1) = " << A_inverse << std::endl;
return 0;
}
输出结果:
A^(-1) = 1.1 -0.1 -0.3
-1.3 0.3 -0.1
0.1 -0.1 0.7
举例应用代码如下所示:
#include
#include
int main() {
Eigen::Matrix3d A;
A << 1, 2, 3,
4, 5, 6,
7, 8, 9;
double trace = A.trace();
std::cout << "矩阵的迹为:" << trace << std::endl;
return 0;
}
输出结果:
矩阵的迹为:15
举例应用代码如下所示:
#include
#include
int main() {
Eigen::Matrix3d A;
A << 1, 2, 3,
4, 5, 6,
7, 8, 9;
double sum = A.sum();
std::cout << "矩阵的和为:" << sum << std::endl;
return 0;
}
输出结果:
矩阵的和为:45