C++Eigen库的配置和基本使用

本文详细介绍Eigen库的下载配置过程及基本使用方法,包括矩阵和向量的初始化、赋值、运算等核心功能,适合初学者快速入门。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.配置

1.下载

http://bitbucket.org/eigen/eigen/get/3.2.5.tar.bz2

2.配置

文件夹名字较长,解压后可重命名,如我命名为eigen3,把D:\program\eigen3添加到visual studio项目属性里的库目录即可。在程序头部包含

#include <Eigen/Dense>

即可使用Eigen的各项功能了。

2.基本使用

// testEigen3.cpp : 定义控制台应用程序的入口点。
//
 
#include "stdafx.h"
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;
int main()
{
	MatrixXf a(4, 1);//必须要进行初始化
	a = MatrixXf::Zero(4, 1);//初始化为0
	cout << "初始化为0" << endl << a << endl;
	a = MatrixXf::Ones(4, 1);//初始化为1,矩阵大小与初始化相关,因为是动态矩阵
	cout << "初始化为1" << endl << a << endl;
	a.setZero();//矩阵置零
	a << 1, 2, 3, 4;//手动赋值
	MatrixXf b(1, 4);
	b.setRandom();//随机生成一个矩阵
	MatrixXf c(3, 3);
	c.setIdentity();
	cout << "置单位矩阵:" << endl << c << endl;
	c.setRandom();
	MatrixXf d = c;
	d = d.inverse();
	cout << "矩阵c:" << endl << c << endl;
	cout << "矩阵a:" << endl << a << endl;
	cout << "矩阵b:" << b << endl;
	cout << "访问a(0):" << endl << a(0) << endl;
	cout << "矩阵相乘:" << endl << a*b << endl;
	cout << "矩阵数乘:" << endl << 2 * a << endl;
	cout << "矩阵c求逆d:" << endl << d << endl;
	cout << "逆矩阵回乘:" << endl << d*c << endl;
	cout << "逆矩阵d转置:" << endl << d.transpose() << endl;
	Vector3d v(1, 2, 3);
	Vector3d w(1, 0, 0);
	cout << "向量相加:" << endl << v + w << endl;
	return 0;
}

运行结果

在这里插入图片描述


作者:鲁中地区有小雨
来源:CSDN
原文:https://blog.csdn.net/gao_summer_cola/article/details/78329000
版权声明:本文为博主原创文章,转载请附上博文链接!

### C++Eigen 使用教程 #### 安装与配置 为了在项目中使用 Eigen,通常只需要下载其头文件并将其路径添加到编译器选项中。Eigen 是一个纯模板,不需要额外编译。 #### 基本概念介绍 Eigen 提供了几种主要的数据结构来表示线性代数对象: - **Matrix**: 表示矩阵,默认情况下采用列优先存储方式。 - **Vector**: 实际上是 Matrix 的特例(固定列为1),用于表示向量。 - **Array**: 类似于 Numpy 数组的操作风格,支持逐元素运算[^2]。 #### 创建初始化矩阵 可以创建不同类型的矩阵,包括静态大小动态大小两种形式。对于动态尺寸的矩阵,可以通过指定行列参数实例化;而对于静态尺寸,则可以直接定义具体数值。 ```cpp // 动态矩阵 Eigen::MatrixXd m(rows, cols); // 静态矩阵 Eigen::Matrix3d id = Eigen::Matrix3d::Identity(); ``` #### 数据填充方法 提供了多种途径给定初始值或者更新现有数据。其中一种常见的方式就是通过逗号分隔符语法快速赋值。 ```cpp m << 1, 2, 3, 4; ``` #### 特殊操作演示 针对特定需求实现的功能展示如下所示的例子展示了如何获取每行的最大系数[^1]。 ```cpp #include <iostream> #include <Eigen/Dense> using namespace std; int main(){ Eigen::MatrixXf mat(2,4); mat << 1, 2, 6, 9, 3, 1, 7, 2; cout << "Row's maximum: \n" << mat.rowwise().maxCoeff() << endl; } ``` #### LU分解案例分析 LU 分解是一种常见的求解线性方程的方法之一,在这里给出了一段关于 `compute` 函数行为描述以及实际应用例子[^3]。 ```cpp Eigen::PartialPivLU<Eigen::MatrixXd> lu(A); lu.compute(A1); // 不改变原始输入矩阵A1的内容 std::cout << "Here is the input matrix A1 after decomposition:\n" << A1 << "\n"; ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值