Eigen 的简单使用 与 轨迹拟合代码的理解

news2024/12/23 0:05:42

工作中遇到一个问题,发到hmi的车辆引导线为斜的,有一说一,仔细看下这段代码,发现用到了Eigen库用来多项式曲线拟合,线性回归,矩阵向量计算等。

#include <iostream>
#include <vector>
#include <eigen3/Eigen/Dense>

int main()
{
  Eigen::MatrixXd matrix_a;
  matrix_a.resize(2,2);
  Eigen::IOFormat fmt;
  fmt.rowPrefix='[';
  fmt.rowSuffix=']';
  fmt.coeffSeparator=',';
  matrix_a(0,0)=1;
  matrix_a(0,1)=2;
  matrix_a(1,0)=3;
  matrix_a(1,1)=4;
  std::cout<<matrix_a.format(fmt)<<std::endl;
  std::cout<<"矩阵转置"<<std::endl;
  std::cout<<matrix_a.transpose().format(fmt)<<std::endl;
  std::cout<<"逆矩阵"<<std::endl;
  std::cout<<matrix_a.inverse().format(fmt)<<std::endl;

  return 0;
}

/*输出
[1,2]
[3,4]
矩阵转置
[1,3]
[2,4]
逆矩阵
[  -2,   1]
[ 1.5,-0.5]

如下图,通过一系列点拟合一元三次方程,表示轨迹线:

 

 利用 Eigen库完成计算,开始想着直接调用 inverse 接口不就行了?试着改了下代码,直接报错了,看提示是 Assertion `rows() == cols()' failed.

哦,忘记方阵才有逆矩阵了,既然拟合的点数量与方程阶数不一定对应,所以不能直接求 X 的逆矩阵,借用转置矩阵来计算。

(设拟合点数量为n)

下面的函数用于求得 Y=XC中Y(n阶向量)与X(n行3列矩阵)

void XYTrajectoryPoly(const std::vector<Point>& traj, unsigned int order, Eigen::MatrixXd& Xs,Eigen::VectorXd& Ys) {

  Xs.resize(traj.size(), order + 1);
  Ys.resize(traj.size());
  for (uint32_t i = 0; i < traj.size(); ++i) {
    for (uint32_t j = 0; j < order + 1; ++j) {
      Xs(i, j) = std::pow(traj[i].x, j);
    }
    Ys(i) = traj[i].y;
  }
}

下面的函数,接收Y与X,返回由方程的系数组成的向量,transpose返回转置矩阵,inverse返回逆矩阵 

void LinearRegression(const Eigen::MatrixXd& Xs,const Eigen::VectorXd& Ys, 
Eigen::VectorXd& Ck) {
  Eigen::MatrixXd Pk;
  Pk = (Xs.transpose() * Xs).inverse();
  Ck = Pk * Xs.transpose() * Ys;
}

Eigen::VectorXd 的读取,下列代码输出-15

  Eigen::VectorXd Ck;
  Ck.resize(3);
  Ck(0)=10;
  Ck(1)=15;
  Ck(2)=3;
  std::cout<<-Ck(1)<<std::endl; 

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

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

相关文章

001-Nacos 服务注册

目录 Nacos介绍注册中心架构面临问题源码分析实例注册-接口实例注册-入口实例注册-创建一个(Nacos)Service实例注册-注册(Nacos)Service Nacos 介绍 Dynamic Naming and Configuration Service 动态的命名和配置服务 反正可以实现注册中心的功能 注册中心架构 服务提供者 …

做好需求分析的4大关键认知

探索如何正确的需求分析&#xff1f;本文详细介绍了4大关键点&#xff0c;帮助您明确用户与产品需求、深入挖掘用户动机&#xff0c;并为产品经理提供筛选需求的实用建议。 一、什么是需求分析以及重要性 需求分析指的是在建立一个新的或改变一个现存的产品时&#xff0c;确定新…

人工智能在网络安全中的应用: 分析人工智能、机器学习和深度学习等技术在预测、检测和应对网络攻击中的作用

第一章&#xff1a;引言 随着信息技术的迅猛发展&#xff0c;网络安全已成为当今社会不容忽视的重要议题。网络攻击手法日益复杂&#xff0c;传统的防御方法已经不再足够。在这一背景下&#xff0c;人工智能&#xff08;AI&#xff09;技术正逐渐崭露头角&#xff0c;为网络安…

vue3学习笔记(一)

一、API风格 Vue 的组件可以按两种不同的风格书写&#xff1a;选项式 API 和组合式 API。 二、组合式API 1.&#xff08;组合式 API 的核心思想是直接在函数作用域内定义响应式状态变量&#xff0c;并将从多个函数中得到的状态组合起来处理复杂问题。这种形式更加自由&#x…

SummaryWriter

SummaryWriter tb_writer SummaryWriter("swin_transformer_loss_acc") 第一个参数 log_dir : 用以保存summary的位置 add_scalar()函数的目的是添加一个标量数据&#xff08;scalar data&#xff09;到summary中 重要的常用的其实就是前三个参数&#xff1a; &…

【C++】模拟实现unordered_map和unordered_set

哈希表封装 前言正式开始模型修改Insert修改迭代器运算符重载 Findoperator[ ] 前言 本篇以前一篇模拟实现哈希表为基础进行改造&#xff0c;如果没看过前一篇的先看一下&#xff1a;【C】模拟实现哈希&#xff08;闭散列和开散列两种方式&#xff09;。 由于本篇代码基于上篇…

编译工具:CMake(五) | 静态库与动态库构建

编译工具&#xff1a;CMake&#xff08;五&#xff09; | 静态库与动态库构建 建立共享库编译共享库指令 ADD_LIBRARY 添加静态库动态库版本号安装共享库和头文件 建立共享库 在Compilation_tool/cmake路径下建立test3目录 在 t3 目录下建立 CMakeLists.txt&#xff0c;内容如…

88-基于stm32单片机空调温湿度控制系统Proteus仿真+源码

资料编号&#xff1a;088 一&#xff1a;功能介绍&#xff1a; 1、采用stm32单片机OLED显示屏DHT11温湿度电机按键&#xff0c;制作一个温湿度采集&#xff0c;OLED显示相关数据&#xff0c;自动制冷制热空调&#xff1b; 2、通过按键设置温度值和工作模式&#xff08;制冷/制热…

MLC LLM:将LLMs部署到消费类硬件的优势、挑战以及解决方案

一、前言 随着生成人工智能&#xff08;AI&#xff09;和大语言模型&#xff08;LLM&#xff09;的快速发展&#xff0c;基于LLM的应用越来越普及。然而&#xff0c;大规模的模型需要密集计算和庞大的资源&#xff0c;使得许多公司无法承担从头开始训练模型的成本。目前&#…

计算机控制技术|17/8|16:27

目录 1. 什么是“纹波”现象&#xff1f;原因为何&#xff1f; 2. 如何解决最小拍控制器的“纹波”问题&#xff1f; 3. 解释“阻尼因子法”&#xff1f; 4. 大林算法控制器设计时&#xff0c;给定闭环系统传递函数模型离散化时为何要加入零阶保持器&#xff1f; 5. 何为“…

86-基于stm32单片机智能家居温湿度监测自动加湿器散热器Proteus仿真+源码

资料编号&#xff1a;086 一&#xff1a;功能介绍&#xff1a; 1、采用stm32单片机OLED显示屏DHT11温湿度电机按键蜂鸣器&#xff0c;制作一个温湿度采集、OLED显示相关数据&#xff0c; 2、通过按键设置温度上限、湿度下限、 3、当采集温度大于设置温度&#xff0c;开启散热电…

【广州华锐视点】VR线上教学资源平台提供定制化虚拟现实学习内容

虚拟现实&#xff08;VR&#xff09;技术的出现为我们提供了一种全新的在线教学方式。由广州华锐视点开发的VR线上教学资源平台&#xff0c;作为一个综合性的学习工具&#xff0c;正在教育领域迅速发展&#xff0c;并被越来越多的教育机构和学生所接受。那么&#xff0c;VR线上…

XDR解决方案成为了新的安全趋势

和当今指数倍增长的安全数据相比&#xff0c;安全人才的短缺带来了潜在的风险。几乎所有的公司&#xff0c;无论规模大小&#xff0c;在安全资源能力上都有限&#xff0c;需要过滤各种告警才能将分析量保持在可接受范围。但这样一来&#xff0c;潜在的威胁线索就可能被埋没&…

在一小时内构建您的深度学习应用程序

一、说明 我已经做了将近十年的数据分析。有时&#xff0c;我使用机器学习技术从数据中获取见解&#xff0c;并且我习惯于使用经典 ML。 虽然我已经通过了神经网络和深度学习的一些MOOC&#xff0c;但我从未在我的工作中使用过它们&#xff0c;这个领域对我来说似乎很有挑战性。…

爬虫的代理IP池写哪里了?

亲爱的程序员小伙伴们&#xff0c;想要提高爬虫效率和稳定性&#xff0c;组建一个强大的代理IP池是非常重要的一步&#xff01;今天我就来和你分享一下&#xff0c;代理IP池到底应该写在哪里&#xff0c;以及如何打造一个令人瞩目的代理IP池&#xff01;准备好了吗&#xff1f;…

【最新可用】VMware中ubuntu与主机window之间使用共享文件夹传输大文件

一、VMware设置共享文件夹 &#xff08;1&#xff09;虚拟机关机情况下&#xff0c;创建一个共享文件夹 &#xff08;2&#xff09;ubuntu中挂载共享文件夹 1、如果之前已经挂载 hgfs&#xff0c;先取消挂载 sudo umount /mnt/hgfs2、重新使用以下命令挂载 sudo /usr/bin/vmh…

11、BigKey

BigKey 阿里广告平台&#xff0c;海量数据里查询某一固定前缀的key 小红书&#xff0c;你如何生产上限制keys */flushdb/flushall等危险命令以防止误删误用&#xff1f; 美团&#xff0c;MEMORY USAGE 命令你用过吗&#xff1f; BigKey问题&#xff0c;多大算big&#xff1f;你…

数据库名字添加中文

Jetbrains 可以呀&#xff0c;这个ui 相当棒 from database import Sqlite3Database from googletrans import Translator import csvif __name__ "__main__":TRANS_EN2ZH Falsetranslator Translator()sqlite Sqlite3Database("./drurmu.db")sqlite.r…

深入篇【C++】手搓模拟实现二叉搜索树(递归/非递归版本)常见应用场景(K模型与KV模型)

深入篇【C】手搓模拟实现二叉搜索树(递归/非递归版本&#xff09;&&常见应用场景 Ⅰ.二叉搜索树概念Ⅱ.二叉搜索树模拟实现(递归与非递归)①.定义结点②.构造二叉树③.插入结点④.删除结点(重要)⑤.查找结点⑥.析构二叉树⑦.拷贝二叉树⑧.二叉树赋值 Ⅲ.二叉搜索树应用…

Cadence+硬件每日学习十个知识点(38)23.8.18 (Cadence的使用,界面介绍)

文章目录 1.Cadence有共享数据库的途径2.Cadence启动3.Cadence界面菜单简介&#xff08;file、edit、view、place、options&#xff09;4.Cadence界面的图标简介5.我的下载资源有三本书 1.Cadence有共享数据库的途径 答&#xff1a; AD缺少共享数据库的途径&#xff0c;目前我…