#include <iostream>
using namespace std;
#include <ctime>
// Eigen 核心部分
#include <Eigen/Core>
// 稠密矩阵的代数运算(逆,特征值等)
#include <Eigen/Dense>
using namespace Eigen;
#define MATRIX_SIZE 50
/****************************
* 本程序演示了 Eigen 基本类型的使用
****************************/
int main(int argc, char **argv) {
// Eigen 中所有向量和矩阵都是Eigen::Matrix,它是一个模板类。它的前三个参数为:数据类型,行,列
// 声明一个2*3的float矩阵
Matrix<float, 2, 3> matrix_23;
// 同时,Eigen 通过 typedef 提供了许多内置类型,不过底层仍是Eigen::Matrix
// 例如 Vector3d 实质上是 Eigen::Matrix<double, 3, 1>,即三维向量
Vector3d v_3d;
// 这是一样的
Matrix<float, 3, 1> vd_3d;
// Matrix3d 实质上是 Eigen::Matrix<double, 3, 3>
Matrix3d matrix_33 = Matrix3d::Zero(); //初始化为零
// 如果不确定矩阵大小,可以使用动态大小的矩阵
Matrix<double, Dynamic, Dynamic> matrix_dynamic;
// 更简单的
MatrixXd matrix_x;
// 这种类型还有很多,我们不一一列举
// 下面是对Eigen阵的操作
// 输入数据(初始化)
matrix_23 << 1, 2, 3, 4, 5, 6;
// 输出
cout << "matrix 2x3 from 1 to 6: \n" << matrix_23 << endl;
// 用()访问矩阵中的元素
cout << "print matrix 2x3: " << endl;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) cout << matrix_23(i, j) << "\t";
cout << endl;
}
// 矩阵和向量相乘(实际上仍是矩阵和矩阵)
v_3d << 3, 2, 1;
vd_3d << 4, 5, 6;
// 但是在Eigen里你不能混合两种不同类型的矩阵,像这样是错的
// Matrix<double, 2, 1> result_wrong_type = matrix_23 * v_3d;
// 应该显式转换
Matrix<double, 2, 1> result = matrix_23.cast<double>() * v_3d;
cout << "[1,2,3;4,5,6]*[3,2,1]=" << result.transpose() << endl;
Matrix<float, 2, 1> result2 = matrix_23 * vd_3d;
cout << "[1,2,3;4,5,6]*[4,5,6]: " << result2.transpose() << endl;
// 同样你不能搞错矩阵的维度
// 试着取消下面的注释,看看Eigen会报什么错
// Eigen::Matrix<double, 2, 3> result_wrong_dimension = matrix_23.cast<double>() * v_3d;
// 一些矩阵运算
// 四则运算就不演示了,直接用+-*/即可。
matrix_33 = Matrix3d::Random(); // 随机数矩阵
cout << "random matrix: \n" << matrix_33 << endl;
cout << "transpose: \n" << matrix_33.transpose() << endl; // 转置
cout << "sum: " << matrix_33.sum() << endl; // 各元素和
cout << "trace: " << matrix_33.trace() << endl; // 迹
cout << "times 10: \n" << 10 * matrix_33 << endl; // 数乘
cout << "inverse: \n" << matrix_33.inverse() << endl; // 逆
cout << "det: " << matrix_33.determinant() << endl; // 行列式
// 特征值
// 实对称矩阵可以保证对角化成功
SelfAdjointEigenSolver<Matrix3d> eigen_solver(matrix_33.transpose() * matrix_33);
cout << "Eigen values = \n" << eigen_solver.eigenvalues() << endl;
cout << "Eigen vectors = \n" << eigen_solver.eigenvectors() << endl;
// 解方程
// 我们求解 matrix_NN * x = v_Nd 这个方程
// N的大小在前边的宏里定义,它由随机数生成
// 直接求逆自然是最直接的,但是求逆运算量大
Matrix<double, MATRIX_SIZE, MATRIX_SIZE> matrix_NN
= MatrixXd::Random(MATRIX_SIZE, MATRIX_SIZE);
matrix_NN = matrix_NN * matrix_NN.transpose(); // 保证半正定
Matrix<double, MATRIX_SIZE, 1> v_Nd = MatrixXd::Random(MATRIX_SIZE, 1);
clock_t time_stt = clock(); // 计时
// 直接求逆
Matrix<double, MATRIX_SIZE, 1> x = matrix_NN.inverse() * v_Nd;
cout << "time of normal inverse is "
<< 1000 * (clock() - time_stt) / (double) CLOCKS_PER_SEC << "ms" << endl;
cout << "x = " << x.transpose() << endl;
// 通常用矩阵分解来求,例如QR分解,速度会快很多
time_stt = clock();
x = matrix_NN.colPivHouseholderQr().solve(v_Nd);
cout << "time of Qr decomposition is "
<< 1000 * (clock() - time_stt) / (double) CLOCKS_PER_SEC << "ms" << endl;
cout << "x = " << x.transpose() << endl;
// 对于正定矩阵,还可以用cholesky分解来解方程
time_stt = clock();
x = matrix_NN.ldlt().solve(v_Nd);
cout << "time of ldlt decomposition is "
<< 1000 * (clock() - time_stt) / (double) CLOCKS_PER_SEC << "ms" << endl;
cout << "x = " << x.transpose() << endl;
return 0;
}
相关推荐
visual studio 2010 下配置线性代数库Eigen
在VS(visual studio 2010)下配置Eigen线性代数库
Visual Studio配置Eigen库-有图无废话
打开,windows下载zip文件。
如何使用OSQP-Eigen
更多的关于Eigen的学习参考 更多的关于OSQP的学习参考 我们在github上找到了使用eigen库封装起来的OSQP库,比原来的OSQP写代码时更好用一些。 我们对照mathworks对quadprog的例子解释对库的使用 一个标准的QP问题可以以如下的标准形式进行描述: 注意这里面的写法不同的书本有些不同的表达:H , f 有时候也被写成 P, q. 接下来给出几个典型的不同约束的二次规划形式: 1,具有线性约束的二次规划 matlab的调用方法是: H = [1 -1; -1 2]; f =
【编程实践】在VS studio中配置Eigen库
Eigen库是C++标准模板库,能够进行向量运算、矩阵运算、矢量运算、数值分析等操作,并且包含相应的运算算法。Eigen官方地址:可在官网下载指定版本的压缩包,将压缩包解压至后面配置的“附件包含目录”中。
QT使用eigen
下载后解压。
双模音频解码器设计:USB+蓝牙LDAC平衡输出方案
音频解码器是数字音频系统中实现数模转换的核心组件,其性能直接决定音质保真度与系统延迟。基于高集成SoC的解码方案通过统一时钟域与片内DSP处理,有效抑制Jitter并简化硬件拓扑;结合全平衡模拟输出架构,可显著提升共模抑制比(CMRR)与信噪比(SNR)。该技术路径广泛应用于便携式Hi-Res音频设备、USB-C小尾巴DAC及蓝牙高解析耳机放大器等场景。本文围绕ES9038Q2M双模SoC展开,详解其在LDAC协议支持、UAC2.0兼容性及平衡电流型DAC输出方面的工程实现,为高性能、可量产音频硬件开发提供
Eigen使用
eigen库在visualstudio中的使用:只需要添加包含目录即可。
Megatron-LM深度解析:万亿参数大模型的3D并行训练之道
训练框架,采用创新的"层内模型并行"设计,通过将Transformer层的计算拆分到多个GPU上并行执行,显著提升训练效率。该系统支持3D并行策略(数据并行、张量并行、流水线并行)和序列并行等新技术,成功应用于训练5300亿参数的MT-NLG模型。相比DeepSpeed、TPU GSPMD等框架,Megatron-LM在NVIDIA GPU上展现出卓越性能,并与TensorRT等工具深度集成,形成从训练到部署的完整解决方案。该项目持续演进,已成为大模型训练的重要基准。
C++ Eigen的安装和基础使用
Eigen是一个C++的数值计算库,包含矩阵、矢量、数值求解以及相关的算法。
Java开发者必看:Apache PDFBox实现PDF数字签名完整指南(附源码)
本文为Java开发者提供了使用Apache PDFBox实现PDF数字签名的完整指南。详细介绍了从环境配置、核心原理到完整代码实现的全过程,涵盖证书管理、签名位置计算、性能优化及实际应用案例,并附有可直接复用的源码,帮助开发者高效集成PDF数字签名功能。
基于物联网技术智慧园林绿化养护管理信息平台
近几年来,随着经济不断的发展,城市面积不断的扩大,城市管理中的园林绿化工作也在这种趋势下不断的发生着深刻改变。管养企业是否按制定的管养计划严格执行?绿化事件整改是否及时到位?绿地面积是否在稳步增长?管养的效果如何?如何客观评价管养企业的管养工作?这些都是我们各级管理者需要面对的问题。 智慧园林绿化养护管理信息平台的开发思路以“考核”为核心,整个信息平台体现出“新、快、高、全、享”五个特点。 智慧园林绿化养护管理信息平台的整个开发理念为:依托五大技术手段(全球卫星定位系统技术、地理信...
【eigen】windows下使用eigen库
说明: 使用很简单,都是头文件,直接加载自己工程里就可以用。 下载eigen源码包,如:eigen-eigen-323c052e1731.zip。 将解压后的eigen-eigen-323c052e1731目录下的Eigen目录拷贝到自己工程下。 在工程中添加Eigen目录下的所有文件。 在自己的文件里包含eigen头文件,如:#include “Eigen/Core” 引用eigen里的类,如...
Cadence Allegro新手避坑:从原理图到PCB,解决‘netrev.lst does not exist’的完整流程
本文详细介绍了Cadence Allegro从原理图设计到PCB导入网表的完整流程,特别针对新手常见的'netrev.lst does not exist'错误提供了系统解决方案。内容包括环境准备、原理图设计规范、网表生成与导入技巧,以及设计数据管理最佳实践,帮助工程师高效完成PCB设计任务。
C++通过CMakeLists使用Eigen库
代码中通过#include<Eigen/Eigen>即可引入Eigen库,但是直接g++编译的时候是通不过的。提示 Eigen/Eigen: No such file or directory。这里需要将Eigen库加入到库中,可以通过CMakeLists实现,如下: CMakeLists.txt cmake_minimum_required(VERSION 2.8 FATAL_ERR...
6.4 实战项目:基于Agent内核构建Code Review智能体
本文介绍了一个基于Agent内核构建的智能Code Review系统实战项目。系统采用多Agent协作架构,包含代码质量分析、安全漏洞识别、性能优化建议等核心功能模块。文章详细展示了系统架构设计,采用协调器Agent管理多个专业Agent协同工作,并提供了基础Agent框架和协调器Agent的TypeScript实现代码。项目结合了AI Agent核心原理和多Agent协作机制,实现了自动化的代码审查流程,能够生成详细的审查报告,帮助开发者提升代码质量和安全性。
HTML小游戏20 —— html5版开心斗地主小游戏(附完整源码)
100个H5游戏专栏🎮 目前已有100+小游戏,源码在持续更新中,前100位订阅限时优惠,先到先得。🐬 订阅专栏后可阅读100个HTML小游戏文章;还可私聊进前端/游戏制作学习交流群;领取一百个小游戏源码。在线演示地址:源码也可在文末进行获取。
ubuntu 安装 Eigen 及使用
ubuntu 安装 Eigen 及使用.
双端之Nginx+Php结合PostgreSQL搭建Wordpress
制作的 PG4WP 分支版本,它与所有版本的 WordPress 兼容,解决了原版的一些问题。参数,确保 PostgreSQL 正在监听默认端口(通常是 5432),或者你自定义的端口。:PG4WP 插件存在缺陷和不完整的功能,可能与最新版本的 WordPress 不兼容。的插件,它允许 WordPress 使用 PostgreSQL 数据库。,如果看到 Nginx 的默认欢迎页面,说明 Nginx 已正确安装。,如果看到 Nginx 的默认欢迎页面,说明 Nginx 已正确安装。
【Eigen】【Eigen实践】【Eigen的使用学习记录】
稠密矩阵的代数运算(逆,特征值等) 1.2 定义和初始化 1.2.1 定义n*m矩阵 1.2.2 定义n*1向量 1.2.3 定义n*n矩阵|初始化为0 1.2.4 定义动态矩阵 1.3 对Eigen操作 1.3.1 输入数据 1.3.2 矩阵整个输出 1.3.3 用()访问矩阵中的元素 1.3.4 矩阵和向量相乘|类型转换 1.4 矩阵运算(随机数、转置、各元素和、迹、数乘、逆、行列式、特征值、特特征向量) 1.5 解方程 初始化求解方程:.....................
计算机控制技术及应用
《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
Eigen的使用总结
Eigen的使用总结声明矩阵和向量声明一个基本的矩阵声明一个基本的向量矩阵初始化为零矩阵赋值随机数声明动态大小的矩阵对矩阵操作输入数据输出数据访问矩阵中的元素改变矩阵数据类型矩阵相乘矩阵转置各元素和迹数乘逆行列式求特征值利用矩阵解方程直接求逆解方程矩阵分解(QR) 解方程 Eigen 是一个 C++ 开源线性代数库 它提供了快速的有关矩阵的线性代数运算,还包括解方程等功能。 Eigen 它是一个纯用头文件搭建起来的库,只能找到它的头文件,没有.so 或.a 那样的二进制文件 在使用时,只需引入 Eigen
温度PID控制PLC程序
温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值
[Eigen中文文档] 在 BLAS/LAPACK 、英特尔® MKL 和 CUDA 中使用 Eigen
自Eigen 3.3版本以及以后,任何F77兼容的BLAS或LAPACK库都可以用作稠密矩阵乘积和稠密矩阵分解的后端。例如,可以在OSX上使用Intel® MKL,Apple的Accelerate框架,OpenBLAS,Netlib LAPACK等。在这种情况下,Eigen的一些算法会被隐式地替换为对BLAS或LAPACK例程的调用。为了使用外部BLAS和LAPACK库,您必须将自己的应用程序链接到相应的库及其依赖项。对其他标量类型的操作或混合实数和复数的操作将继续使用内置的算法。
IMSL CNL 7.0.0 (x86-64)Crack
IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件
Eigen介绍及简单使用
Eigen介绍及简单使用 原文链接:https://blog.youkuaiyun.com/yxpandjay/article/details/80587916 Eigen是可以用来进行线性代数、矩阵、向量操作等运算的C++库,它里面包含了很多算法。它的License是MPL2。它支持多平台。 Eigen采用源码的方式提供给用户使用,在使用时只需要包含Eigen的头文件即可进行使用。之所以采用这种方式,是因为Eigen采用模板方式实现,由于模板函数不支持分离编译,所以只能提供源码而不是动态库的方式供用户使用。 矩阵的定
Eigen - 在 STL 容器中使用 Eigen
摘要:本文介绍了在STL容器中使用Eigen时的内存对齐问题及解决方案。对于C++17及以上版本,编译器会自动处理对齐;其他情况下,在容器中存储Eigen固定大小可向量化类型时必须使用Eigen提供的aligned_allocator。文章详细说明了如何为不同容器(如std::map)配置对齐分配器,并特别指出std::vector在C++98/03中的特殊处理要求。还提供了替代方案——通过EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION宏特化std::vector,但需注意使用
Eigen使用总结
Eigen 使用总结1.模块和头文件2.语法基础2.1.Matrix类2.2.矩阵与向量的运算2.3.Array类2.4.矩阵初始化2.5. 归约,迭代器,广播范数计算布尔归约迭代器,获取某元素位置3.Eigen线性方程与矩阵分解 1.模块和头文件 模块 头文件 说明 Core #include<Eigen/Core> 包含Matrix和Array类,基础的线性代数运算...
3419



被折叠的 条评论
为什么被折叠?



