Eigen矩阵运算

没有接触过Eigen的请http://www.cnblogs.com/salan668/p/3643321.html

下面简单介绍实现矩阵的乘法,其它类似

#include <Eigen/Dense>

#include<iostream>
using namespace std ;
using namespace Eigen;
int main()
{
MatrixXf m(1,2);//
MatrixXf n(2,2); //2行2列
MatrixXf result(1,1);//结果
double result1;
m<<1,2;
n<<5,6,7,8;
result=m*n*m.transpose();//m转置
result1=result.sum();//计算后得到一个数,不然还是矩阵
cout<<"--Matrix m*n"<<endl <<result<<endl ;
cout<<"--sum(Matrix m*n)"<<endl <<result1<<endl ;
system("pause");
}
Eigen库中,矩阵运算的实现方法非常丰富,涵盖了基本的矩阵加减、乘法、转置,到更复杂的特征值分解、矩阵求逆、奇异值分解等操作。以下是一些常见的矩阵运算及其在Eigen库中的实现方式: ### 矩阵的定义与初始化 在Eigen中,可以使用`Eigen::MatrixXd`定义动态大小的矩阵,也可以使用如`Eigen::Matrix3d`定义固定大小的矩阵。初始化矩阵可以通过逐个赋值,也可以使用逗号初始化语法。 ```cpp #include <iostream> #include <Eigen/Dense> using Eigen::MatrixXd; int main() { // 定义并初始化一个2x2的矩阵 MatrixXd m(2, 2); m(0, 0) = 3; m(1, 0) = 2.5; m(0, 1) = -1; m(1, 1) = m(1, 0) + m(0, 1); std::cout << m << std::endl; // 使用逗号初始化 MatrixXd n(2, 2); n << 1, 2, 3, 4; std::cout << n << std::endl; } ``` ### 矩阵加法与减法 两个相同大小的矩阵可以直接使用`+`或`-`进行加减运算。 ```cpp MatrixXd a(2, 2); a << 1, 2, 3, 4; MatrixXd b(2, 2); b << 5, 6, 7, 8; MatrixXd c = a + b; // 矩阵加法 MatrixXd d = a - b; // 矩阵减法 ``` ### 矩阵乘法 矩阵乘法可以通过`*`运算符进行,需要注意矩阵维度的匹配。 ```cpp MatrixXd e = a * b; // 矩阵乘法 ``` ### 矩阵的转置 矩阵的转置可以通过`.transpose()`方法获取。 ```cpp MatrixXd f = a.transpose(); // 矩阵转置 ``` ### 矩阵求逆 矩阵的逆可以通过`.inverse()`方法计算,但前提是矩阵必须是方阵且可逆。 ```cpp MatrixXd g = a.inverse(); // 矩阵求逆 ``` ### 矩阵的特征值与特征向量 对于特征值问题,可以使用`EigenSolver`类来计算矩阵的特征值特征向量。 ```cpp #include <Eigen/Eigenvalues> EigenSolver<MatrixXd> es(a); std::cout << "Eigenvalues:\n" << es.eigenvalues() << std::endl; std::cout << "Eigenvectors:\n" << es.eigenvectors() << std::endl; ``` 对于自伴随矩阵(Hermitian矩阵),可以使用`SelfAdjointEigenSolver`来提高计算效率数值稳定性。 ```cpp SelfAdjointEigenSolver<MatrixXd> saes(a); std::cout << "Eigenvalues (Self-Adjoint):\n" << saes.eigenvalues() << std::endl; std::cout << "Eigenvectors (Self-Adjoint):\n" << saes.eigenvectors() << std::endl; ``` ### 矩阵与数组之间的转换 在需要将数组转换为Eigen矩阵时,可以使用`Map`来创建一个指向数组内存的矩阵视图。 ```cpp int array[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; Eigen::Map<Eigen::Matrix3i> mat1(array); // 将数组映射为列主序矩阵 Eigen::Map<Eigen::Matrix<int, 3, 3, Eigen::RowMajor>> mat2(array); // 将数组映射为行主序矩阵 ``` 若需要将Eigen矩阵转换为数组,可以通过`.data()`方法获取矩阵数据的指针。 ```cpp MatrixXd mat(2, 2); double* ptr = mat.data(); // 获取矩阵数据的指针 ``` 以上内容涵盖了Eigen库中矩阵运算的一些基本实现方法,具体应用时可以根据实际需求选择合适的函数类[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值