eigen使用遇到的问题

eigen下载和配置

1.eigen下载地址:http://eigen.tuxfamily.org/index.php?title=Main_Page
2.配置VS2013:
先解压下载的eigen,然后解压重命名eigen3.3.6(自己喜欢的文件夹名):

然后,打开vs,新建一个project,添加main函数:

#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;
int main()
{
	MatrixXd m = MatrixXd::Random(3, 3);              //随机生成3*3的double型矩阵
	m = (m + MatrixXd::Constant(3, 3, 1.2)) * 50;      //MatrixXd::Constant(3,3,1.2)表示生成3*3的double型矩阵,该矩阵所有元素均为1.2
	cout << "m =" << endl << m << endl;
	VectorXd v(3);        // 定义v为3*1的double型向量
	v << 1, 2, 3;         // 向量赋值
	cout << "m * v =" << endl << m * v << endl;
	system("pause");
	return 0;
}

接下来配置eigen,习惯在调试->属性->配置属性-> C/C++ ->常规->附加包含目录 中添加eigen路径:

事实证明这样添加eigen没有用,尴尬。
查了一下看别人有的从解决方案右键打开属性页进行添加的,但我试了下也是不行。
后来想起来配置opencv时一劳永逸的方法:在属性管理器中右键打开属性页进行添加eigen路径:


再次运行,没有bug,输出结果:

3.项目用到的eigen部分:
解44矩阵之间的变换矩阵X:AX=B((inv A * A * X = inv A * B)->X = inv A * B)
涉及到用eigen求解逆矩阵,顺便把eigen求转置矩阵,伴随矩阵,矩阵的行列式和矩阵和向量相乘都学习一下。

#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;
int main()
{
	//随机生成3*3的double型矩阵
	//MatrixXd::Constant(4,4,1.2)表示生成4*4的double型矩阵,该矩阵所有元素均为1.2
	MatrixXd Mat1 = MatrixXd::Random(4, 4); 
	Mat1 = (Mat1 + MatrixXd::Constant(4, 4, 1.2)) * 50;
	MatrixXd Mat2 = MatrixXd::Random(4, 4);
	Mat2 = (Mat2 + MatrixXd::Constant(4, 4, 1.2)) * 50;
	MatrixXd Mat3;
	Mat3 = Mat1.inverse() * Mat2; //A*X=B的矩阵,求解X(Mat3)

	cout << "Mat1 =" << endl << Mat1 << endl;
	cout << "Mat2 =" << endl << Mat2 << endl;

	cout << "Mat1的转置矩阵:\n" << Mat1.transpose() << endl;
	cout << "Mat1的伴随矩阵:\n" << Mat1.adjoint() << endl;
	cout << "Mat1的逆矩阵:\n" << Mat1.inverse() << endl;
	cout << "Mat1的行列式:\n" << Mat1.determinant() << endl;

	cout << "Mat3 =" << endl << Mat3 << endl;

	VectorXd Vec(4);        // 定义v为4*1的double型向量
	Vec << 1, 2, 3, 4;         // 向量赋值
	cout << "Mat1 * Vec =" << endl << Mat1 * Vec << endl;

	system("pause");
	return 0;
}

运行程序,输出结果:

革命尚未成功,同志仍需努力!

### 使用CMake配置和构建Eigen项目 #### 准备工作 为了成功使用CMake来配置和构建Eigen项目,首先需要确保已经获取了Eigen库的源码。由于Eigen是一个头文件库,其主要功能由一系列模板类实现,因此理论上可以直接包含这些头文件而无需编译。然而,在某些情况下(如集成测试或特定平台支持),仍然可能希望通过完整的构建过程来进行验证。 #### 配置环境变量 对于Windows用户来说,遇到`Could NOT find Eigen3 (missing: Eigen3_DIR)`错误通常是因为未正确设置路径。可以通过指定`EIGEN3_INCLUDE_DIR`指向Eigen根目录下的`include/eigen3`位置解决此问题[^5]。 #### CMakeLists.txt编写指南 创建一个简单的`CMakeLists.txt`文件用于描述项目的依赖关系以及如何链接到Eigen: ```cmake cmake_minimum_required(VERSION 3.10) project(MyProjectUsingEigen) set(CMAKE_CXX_STANDARD 17) find_package(Eigen3 REQUIRED) add_executable(my_program main.cpp) target_include_directories(my_program PRIVATE ${EIGEN3_INCLUDE_DIRS}) ``` 这段脚本定义了一个名为`MyProjectUsingEigen`的新工程,并指定了最低版本需求为CMake 3.10以上;接着设置了C++标准至C++17;最后尝试寻找系统中存在的Eigen包并将其加入可执行程序的目标属性中[^4]。 #### 执行具体操作命令 完成上述准备工作之后,则可以按照以下流程依次运行相应的CMake指令来完成整个构建过程: - **配置阶段** ```bash mkdir build && cd build cmake .. \ -G "Visual Studio 16 2019" -A x64 \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DEIGEN3_INCLUDE_DIR=/path/to/eigen/include/eigen3/ ``` 这里假设正在使用的是Visual Studio作为生成器(`Generator`),并且选择了64位架构为目标平台。同时设定了调试信息级别较高的发布模式(RelWithDebInfo),并通过显式提供`EIGEN3_INCLUDE_DIR`参数解决了潜在找不到Eigen问题[^3]。 - **实际构建** ```bash cmake --build . --config RelWithDebInfo ``` 此处利用之前生成好的解决方案/项目文件进行具体的编译任务处理[^2]。 - **安装部署(如有必要)** 如果希望将编译产物复制到其他地方供后续分发或其他用途时,还可以继续追加一条安装命令: ```bash cmake --build . --config RelWithDebInfo --target install ``` 不过需要注意,默认情况下这一步骤可能会覆盖掉原有安装位置的内容,请谨慎选择是否启用该选项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZPILOTE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值