Eigen矩阵模板类------c++

头文件

#include <Eigen/Core>
#include <Eigen/Dense>

矩阵

	// 定义了一个2x3的浮点型矩阵 Eigen::Matrix<float, 2, 3> matrix_23;matrix_23 << 1, 2, 3, 4, 5, 6;cout << "matri_23=" << endl;cout << matrix_23 << endl;// 单个元素访问for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){cout << matrix_23(i, j) << "\t";cout << endl;}}cout << "------------" << endl;

在这里插入图片描述

向量

	// 定义了一个3维的双精度浮点型向量Eigen::Vector3d v_3d;v_3d << 3, 2, 1; cout << "v_3d=" << endl;cout << v_3d << endl;cout << "------------" << endl;

在这里插入图片描述

乘法

	// 定义了一个2x3的浮点型矩阵 Eigen::Matrix<float, 2, 3> matrix_23;matrix_23 << 1, 2, 3, 4, 5, 6;cout << "matri_23=" << endl;cout << matrix_23 << endl;cout << "------------" << endl;// 定义了一个3维的双精度浮点型向量Eigen::Vector3d v_3d;v_3d << 3, 2, 1; cout << "v_3d=" << endl;cout << v_3d << endl;cout << "------------" << endl;// 定义了一个3x1的浮点型矩阵Eigen::Matrix<float, 3, 1> vd_3d;vd_3d << 4, 5, 6;cout << "vd_3d=" << endl;cout << vd_3d << endl;cout << "------------" << endl;// 矩阵 matrix_23 转换为双精度浮点型,与向量 v_3d 相乘Eigen::Matrix<double, 2, 1> result = matrix_23.cast<double>() * v_3d;cout << result << endl;cout << "------------" << endl;// 将矩阵 matrix_23 与向量 vd_3d 相乘Eigen::Matrix<float, 2, 1> result2 = matrix_23 * vd_3d;cout << result2 << endl;

在这里插入图片描述

随机矩阵

	// 定义了一个3x3的双精度浮点型矩阵 matrix_33,并初始化为零矩阵Eigen::Matrix3d matrix_33 = Eigen::Matrix3d::Zero();cout << matrix_33 << endl;// 生成一个3x3的随机双精度浮点型矩阵 matrix_33,并将其打印matrix_33 = Eigen::Matrix<double, 3, 3>::Random();cout << matrix_33 << endl;

在这里插入图片描述

矩阵的属性

	// 定义了一个3x3的双精度浮点型矩阵 matrix_33,并初始化为零矩阵Eigen::Matrix3d matrix_33 = Eigen::Matrix3d::Zero();cout << matrix_33 << endl;cout << "------随机------" << endl;// 生成一个3x3的随机双精度浮点型矩阵 matrix_33,并将其打印matrix_33 = Eigen::Matrix<double, 3, 3>::Random();cout << matrix_33 << endl;cout << "------转置------" << endl;// 打印 matrix_33 的转置矩阵cout << matrix_33.transpose() << endl;// 打印 matrix_33 的逆矩阵cout << "------逆矩阵------" << endl;cout << matrix_33.inverse() << endl;// 分别打印 matrix_33 的元素之和(两个同型矩阵相加)cout << "------和------" << endl;cout << matrix_33.sum() << endl;// 分别打印 matrix_33 的元素的迹(矩阵主对角线上元素的和)cout << "------迹------" << endl;cout << matrix_33.trace() << endl;// 将 matrix_33 中的每个元素乘以10cout << "------*10------" << endl;cout << 10 * matrix_33 << endl;cout << "------决定因素------" << endl;// 方阵特有的一个标量值,它表示矩阵对空间的扭曲程度或者说变换的因子cout << matrix_33.determinant() << endl;

在这里插入图片描述

特征值和特征向量

	// 定义了一个3x3的双精度浮点型矩阵 matrix_33,并初始化为零矩阵Eigen::Matrix3d matrix_33 = Eigen::Matrix3d::Zero();cout << matrix_33 << endl;cout << "------随机------" << endl;// 生成一个3x3的随机双精度浮点型矩阵 matrix_33,并将其打印matrix_33 = Eigen::Matrix<double, 3, 3>::Random();cout << matrix_33 << endl;// 使用自共轭特征值求解器求解 matrix_33 转置矩阵与自身的乘积的特征值和特征向量Eigen::SelfAdjointEigenSolver<Eigen::Matrix3d> eigen_solver(matrix_33.transpose() * matrix_33);cout << "Eigen value = \n"<< eigen_solver.eigenvalues() << endl;	// 特征值cout << "Eigen vectors = \n"<< eigen_solver.eigenvectors() << endl; // 特征向量 

在这里插入图片描述

矩阵旋转

using namespace std;#include <Eigen/Core>
#include <Eigen/Geometry>int main(int argc, char **argv)
{// 3x3的单位矩阵,表示没有任何旋转Eigen::Matrix3d roration_matrix = Eigen::Matrix3d::Identity();cout << roration_matrix << endl;// 创建一个角轴对象,表示绕Z轴旋转45度Eigen::AngleAxisd roration_vector(M_PI / 4, Eigen::Vector3d(0, 0, 1));// 将角轴对象转换为旋转矩阵,并输出将向量(1,0,0)旋转后的结果cout.precision(3);roration_matrix = roration_vector.toRotationMatrix();cout << "(1,0,0) after roration" << roration_matrix.transpose() << endl;// 使用角轴对象直接将向量(1,0,0)进行旋转Eigen::Vector3d v(1, 0, 0);Eigen::Vector3d v_rorate = roration_vector * v;cout << "(1,0,0) after roration driectly" << v_rorate.transpose() << endl;// 使用旋转矩阵将向量(1,0,0)进行旋转v_rorate = roration_matrix * v;cout << "(1,0,0) after roration" << v_rorate.transpose() << endl;// 获取旋转矩阵对应的欧拉角Eigen::Vector3d euler_angle = roration_matrix.eulerAngles(2, 1, 0);cout << "yaw pitch roll" << euler_angle.transpose() << endl;// 创建一个等距变换矩阵,先旋转后平移Eigen::Isometry3d T = Eigen::Isometry3d::Identity();T.rotate(roration_vector);T.pretranslate(Eigen::Vector3d(1, 3, 4));cout << "Transform matrix = \n" << T.matrix() << endl;// 使用等距变换矩阵将向量v进行变换Eigen::Vector3d v_transformed = T * v;cout << "v tranform = " << v_transformed.transpose() << endl;// 创建一个四元数对象,表示与角轴对象对应的旋转Eigen::Quaterniond q = Eigen::Quaterniond(roration_vector);cout << " quaterniond = \n" << q.coeffs() << endl;// 重新设置四元数对象q = Eigen::Quaterniond(roration_vector);cout << "quaterniond = \n " << q.coeffs() << endl;// 使用四元数对象将向量(1,0,0)进行旋转v_rorate = q * v;cout << "(1,0,0) after roration" << v_rorate.transpose() << endl;std::cout << "Hello, world!" << std::endl;return 0;
}

#include <Eigen/Core>
#include <Eigen/Geometry>int main(int argc, char **argv)
{// 创建一个角轴对象t_v,表示绕Z轴旋转45度。然后,通过matrix()函数将角轴对象转换为旋转矩阵t_R,并通过transpose()函数输出转置后的旋转矩阵Eigen::AngleAxisd t_v(M_PI / 4, Eigen::Vector3d(0, 0, 1));Eigen::Matrix3d t_R = t_v.matrix();Eigen::Quaterniond t_Q(t_v);std::cout << "t_R = \n"  << t_R.transpose() << std::endl;// std::cout<<"t_Q = \n"<<t_Q<<endl;// 使用fromRotationMatrix()函数将旋转矩阵t_R转换为角轴对象V2,并直接将t_R赋值给角轴对象V3,然后输出V3对应的旋转矩阵Eigen::AngleAxisd V2;V2.fromRotationMatrix(t_R);Eigen::AngleAxisd V3;V3 = t_R;std::cout << "V3\n" << V3.matrix() << std::endl;// 直接将旋转矩阵t_R传递给角轴对象V4,并输出V4对应的旋转矩阵Eigen::AngleAxisd V4(t_R);std::cout << "V4\n" << V4.matrix() << std::endl;// 将四元数对象t_Q传递给角轴对象V5,并输出V5对应的旋转矩阵Eigen::AngleAxisd V5(t_Q);std::cout << "V5\n" << V5.matrix() << std::endl;// 手动创建一个四元数对象Q1,然后分别输出其系数和对应的旋转矩阵Eigen::Quaterniond Q1(cos((M_PI / 4) / 2), 0 * sin((M_PI / 4) / 2), 0 * sin((M_PI / 4) / 2), 1 * sin((M_PI / 4) / 2));std::cout << "Quaterniond\n" << Q1.coeffs() << std::endl;std::cout << "Quaterniond\n" << Q1.matrix() << std::endl;// 分别输出四元数对象Q1的四个系数std::cout << Q1.x() << std::endl;std::cout << Q1.y() << std::endl;std::cout << Q1.z() << std::endl;std::cout << Q1.w() << std::endl;// 创建一个3x3的单位矩阵R1Eigen::Matrix3d R1 = Eigen::Matrix3d::Identity();std::cout << "Rotation_matrix" << std::endl << R1;std::cout << "-----------------------" << std::endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/31909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

激励-保健理论和公平理论

激励-保健理论 herzberg的激励-保健理论中&#xff0c;保健因素是context of a job&#xff0c;激励因素是content of a job。 context of a job是受组织控制的因素&#xff0c;比如工作条件&#xff0c;基本工资&#xff0c;公司政策等&#xff0c;个人无法支配。content of…

【C语言】解决C语言报错:Buffer Overflow

文章目录 简介什么是Buffer OverflowBuffer Overflow的常见原因如何检测和调试Buffer Overflow解决Buffer Overflow的最佳实践详细实例解析示例1&#xff1a;字符串操作不当示例2&#xff1a;数组访问越界示例3&#xff1a;未检查输入长度示例4&#xff1a;使用不安全的函数 进…

Introduction to linear optimization 第 2 章课后题答案 11-15

线性规划导论 Introduction to linear optimization (Dimitris Bertsimas and John N. Tsitsiklis, Athena Scientific, 1997)&#xff0c; 这本书的课后题答案我整理成了一个 Jupyter book&#xff0c;发布在网址&#xff1a; https://robinchen121.github.io/manual-introdu…

Day13-Spark SQL的学习

Spark SQL的学习 一.Spark SQL基础 二.Spark SQL整合hive 文章目录 Spark SQL的学习一、Spark SQL基础Spark SQL介绍DataFrame和DataSetSpark SQL的基本使用Spark SQL基本使用案例 Spark SQL函数内置函数自定义函数窗口&#xff08;开窗&#xff09;函数 二、Spark SQL整合Hiv…

【Redis】内存回收和内存淘汰机制

1 概念 Redis 所有的数据都是存储在内存中的, 如果不进行任何的内存回收, 那么很容易出现内存爆满的情况。因此&#xff0c;在某些情况下需要对占用的内存空间进行释放。 Redis 中内存的释放主要分为两类 Redis 中内存的释放主要分为两类: 内存回收: 将过期的 key 清除&#…

MySQL的DDL语句

文章目录 ☃️概述☃️DDL&#xff08;数据定义语言&#xff09;☃️数据库操作☃️表操作☃️DDL的重要性 ☃️概述 MySQL 通用语法分类 ● DDL: 数据定义语言&#xff0c;用来 定义数据库对象&#xff08;数据库、表、字段&#xff09; ● DML: 数据操作语言&#xff0c;用…

云计算之CDN

目录 一.什么是CDN&#xff1f; 二.使用CDN的好处&#xff1a; 三.主要特点&#xff1a; 四.关键功能&#xff1a; 一.什么是CDN&#xff1f; 1.CDN的全称是Content Delivery Network&#xff0c;即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和…

常见的Wi-Fi蓝牙模组

在嵌入式领域&#xff0c;常见的Wi-Fi蓝牙模组确实包括多个知名品牌&#xff0c;如乐鑫、安信可和移远等&#xff0c;以前可能你听的最多的是ESP8266&#xff0c;不过今天讨论的是Wi-Fi蓝牙模组&#xff0c;而8266本身并不内置蓝牙功能&#xff0c;不在介绍范围。而拿到模块之后…

Android提供的LruCache类简介(1)

* If your cached values hold resources that need to be explicitly released, * override {link #entryRemoved}. * 如果你cache的某个值需要明确释放&#xff0c;重写entryRemoved() * If a cache miss should be computed on demand for the corresponding keys, * ov…

redis.conf 参数详解,方便进行性能优化配置

以下是redis.conf中一些常见参数的详细说明&#xff1a; daemonize&#xff1a;是否以后台进程运行&#xff0c;默认为no&#xff1b; pidfile&#xff1a;如以后台进程运行&#xff0c;则需指定一个pid&#xff0c;默认为/var/run/redis.pid&#xff1b;bind&#xff1a;绑定主…

【鸿蒙】创建第⼀个鸿蒙项⽬

点击 Create Project 配置项目 开发工具界面 工程介绍

RFID无线测温技术在医院电力系统中的应用

在医疗设施的日常运营中&#xff0c;确保电力系统的可靠性和安全性至关重要。特别是在医院环境中&#xff0c;对于供电的稳定与安全有着十分高的要求&#xff0c;面对持续增加的就医人数所带来的接诊压力及高精密设备所带来的电力运行负荷&#xff0c;这是对医疗机构的电力系统…

vue实现post请求接口流式输出数据sse

使用fetchEventSource 参考git源码&#xff1a;https://github.com/Azure/fetch-event-source/tree/main 本地联通 发现数据并没有流式输出&#xff1a;vue代理需要关闭compress 如下&#xff1a; devServer:{proxy:{},compress:false } 安装插件 npm install microsoft/f…

远程医疗软件到底哪个好用?

随着科技进步的不断推进&#xff0c;远程医疗已经成为现代医疗体系的一个重要支柱。远程医疗软件&#xff0c;通过网络通信技术的运用&#xff0c;打破了地理限制&#xff0c;实现了医疗资源的有效整合与共享&#xff0c;为民众提供了前所未有的便捷高效的医疗服务体验。那么&a…

如何修改外接移动硬盘的区号

- 问题介绍 当电脑自身内存不够使用的时候&#xff0c;使用外接硬盘扩展内存是一个不错的选择。但是当使用的外接硬盘数量过多的时候&#xff0c;会出现分配硬盘的区号变动的情况&#xff0c;这种情况下会极大的影响使用的体验情况。可以通过以下步骤手动调整恢复 - 配置 版本…

python-16-零基础学python 用类实现登录次数的记录

学习内容&#xff1a;《python编程&#xff1a;从入门到实践》第二版 知识点&#xff1a; 类&#xff0c;特殊函数&#xff0c;编写方法&#xff0c;创建实例&#xff0c;用方法修改类的值 练习内容&#xff1a; 练习9-5&#xff1a;尝试登录次数 在为完成练习9-3而编写的…

功能测试【测试用例模板、Bug模板、手机App测试】

功能测试 Day01 web项目环境与测试流程、业务流程测试一、【了解】web项目环境说明1.1 环境的定义&#xff1a;项目运行所需要的所有的软件和硬件组合1.2 环境(服务器)的组成&#xff1a;操作系统数据库web应用程序项目代码1.3 面试题&#xff1a;你们公司有几套环境&#xff1…

09-axios在Vue中的导入与配置

09-axios 前言首先简单了解什么是Axios&#xff1f;以上完成后就可以使用了 前言 我们接着上一篇文章 08-路由地址的数据获取 来讲。 下一篇文章 10-vuex在Vue中的导入与配置 首先简单了解什么是Axios&#xff1f; Axios是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端…

百度文心智能体,创建属于自己的智能体应用

百度文心智能体平台为你开启。百度文心智能体平台&#xff0c;创建属于自己的智能体应用。百度文心智能体平台是百度旗下的智能AI平台&#xff0c;集成了先进的自然语言处理技术和人工智能技术&#xff0c;可以用来创建属于自己的智能体应用&#xff0c;访问官网链接&#xff1…

docker基础使用教程

1.准备工作 例子&#xff1a;工程在docker_test 生成requirements.txt文件命令&#xff1a;&#xff08;使用参考链接2&#xff09; pip list --formatfreeze > requirements.txt 参考链接1&#xff1a; 安装pipreqs可能比较困难 python 项目自动生成环境配置文件require…