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

工作中遇到一个问题,发到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.rhkb.cn/news/94233.html

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

相关文章

Kafka 集群搭建过程

前言 跟着尚硅谷海哥文档搭建的Kafka集群环境&#xff0c;在此记录一下&#xff0c;侵删 注意&#xff1a;博主在服务器上搭建环境的时候使用的是一个服务器&#xff0c;所以这篇博客可能会出现一些xsync分发到其他服务器时候的错误&#xff0c;如果你在搭建的过程中出现了错…

UE5.2程序发布及运行问题记录

发布后的程序默认是以全屏模式启动运行的&#xff0c;通过添加以下命令行参数&#xff0c;可实现程序的窗口模式运行&#xff1a; -ResX1280 -ResY720 -WINDOWED 发布后的程序&#xff0c;启动时&#xff0c;提示显卡驱动警告&#xff08;如图1所示&#xff09;&#xff0c;但是…

k8s认证详解 k8s证书详解 2023推荐

推荐阅读 https://www.yii666.com/blog/478731.html?actiononAll 在 Kube-apiserver 中提供了很多认证方式&#xff0c;其中最常用的就是 TLS 认证&#xff0c;当然也有 BootstrapToken&#xff0c;BasicAuth 认证等&#xff0c;只要有一个认证通过&#xff0c;那么 Kube-api…

电脑msvcr120.dll丢失怎么修复,msvcr120.dll怎么安装?

msvcr120.dll是Microsoft Visual C Redistributable的一部分&#xff0c;它是Windows操作系统中的一个动态链接库文件。这个文件包含了一些用于C编程的函数和资源&#xff0c;它们被许多应用程序用于提供特定的功能和服务。如果你在运行某个程序时遇到了缺少msvcr120.dll的错误…

小知识积累

1、使用JSON.parse(JSON.stringify()) 深拷贝时会出现的问题 var obj {a: "zs",b: undefined,c: Symbol("score"),d: null,e: function () {console.log("show");},};console.log(JSON.parse(JSON.stringify(obj)));很明显undefined、函数、sym…

Java进阶篇--数据结构

目录 一.数组&#xff08;Array&#xff09;&#xff1a; 1.1 特点&#xff1a; 1.2 基本操作&#xff1a; 1.3 使用数组的好处包括&#xff1a; 1.4 数组也有一些限制&#xff1a; 二.集合框架&#xff08;Collections Framework&#xff09;&#xff1a; 2.1 列表…

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

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

每天一道leetcode:934. 最短的桥(图论中等广度优先遍历)

今日份题目&#xff1a; 给你一个大小为 n x n 的二元矩阵 grid &#xff0c;其中 1 表示陆地&#xff0c;0 表示水域。 岛 是由四面相连的 1 形成的一个最大组&#xff0c;即不会与非组内的任何其他 1 相连。grid 中 恰好存在两座岛 。 你可以将任意数量的 0 变为 1 &#…

JVM——JDK 监控和故障处理工具总结

文章目录 JDK 命令行工具jps:查看所有 Java 进程jstat: 监视虚拟机各种运行状态信息 jinfo: 实时地查看和调整虚拟机各项参数jmap:生成堆转储快照**jhat**: 分析 heapdump 文件**jstack** :生成虚拟机当前时刻的线程快照 JDK 可视化分析工具JConsole:Java 监视与管理控制台连接…

尚硅谷css3笔记

目录 一、新增长度单位 二、新增盒子属性 1.border-box 怪异盒模型 2.resize 调整盒子大小 3.box-shadow 盒子阴影 案例&#xff1a;鼠标悬浮盒子上时&#xff0c;盒子有一个过度的阴影效果 三、新增背景属性 1.background-origin 设置背景图的原点 2.background-clip 设置背…

润和软件HopeStage操作系统正式上架阿里云、华为云、腾讯云商店

近日&#xff0c;润和软件HopeStage操作系统正式上架阿里云、华为云、腾讯云商店。 随着科技的发展&#xff0c;云服务成为现代社会信息和资讯的交换、共享、存储、检索、应用等重要方式。阿里云、华为云、腾讯云作为我国云服务市场三巨头&#xff0c;其云商店产品全面覆盖云、…

根据Dockerfile创建容器案例讲解

-f为dokerfile的路径&#xff0c; -t为新镜像的名称及版本。 后面这个点是寻址路径。

安防视频汇聚平台EasyCVR视频监控综合管理平台H.265转码功能更新,新增分辨率配置的具体步骤

安防视频集中存储EasyCVR视频监控综合管理平台可以根据不同的场景需求&#xff0c;让平台在内网、专网、VPN、广域网、互联网等各种环境下进行音视频的采集、接入与多端分发。在视频能力上&#xff0c;视频云存储平台EasyCVR可实现视频实时直播、云端录像、视频云存储、视频存储…

C语言:每日一练(选择+编程)

目录 选择题&#xff1a; 题一&#xff1a; 题二&#xff1a; 题三&#xff1a; 题四&#xff1a; 题五&#xff1a; 编程题&#xff1a; 题一&#xff1a;打印1到最大的n位数 示例1 思路一&#xff1a; 题二&#xff1a;计算日期到天数转换 示例1 思路一&#xf…

发掘Win10神奇工具:计划任务程序的自动化魔力

在Windows 10系统中&#xff0c;隐藏着许多不为人知的神奇工具&#xff0c;您了解多少呢&#xff1f;想象一下&#xff0c;如果有一种工具&#xff0c;能够像机器人一样在您设定的时间自动执行各种任务&#xff0c;您会不会觉得它是一件非常实用的利器&#xff1f;今天&#xf…

TensorFlow2.1 模型训练使用

文章目录 1、环境安装搭建2、神经网络2.1、解决线性问题2.2、FAshion MNIST数据集使用 3、卷积神经网络3.1、卷积神经网络使用3.2、ImageDataGenerator使用3.3、猫狗识别案例3.4、参数优化 1、环境安装搭建 链接: Windows 安装Tensorflow2.1、Pycharm开发环境 2、神经网络 1…

Linux:如何挂载Window的共享目录

本文介绍的方法操作简单快捷&#xff0c;实用性强。下面就让小编来带大家学习“Linux下怎么挂载Window中的共享目录”吧! 一、在Window下创建共享目录 1、首先&#xff0c;在Window下创建一个目录作为共享目录&#xff0c;此处创建的目录名为ShareDir 2、右键目录&#xff0c…

UDP协议详解

1、UDP协议的基本属性 什么是udp协议 udp也是传输层特别重要的协议&#xff1b;它提供一种无连接的、不可靠的、数据报传输服务。 udp协议的技术特性 无连接&#xff1a;发送端与接收端传输数据时不用建立连接&#xff1b;因此udp的传输速度快。 不可靠&#xff1a;这个不可靠…

mac上如何压缩视频大小?

mac上如何压缩视频大小&#xff1f;由于视频文件体积庞大&#xff0c;常常会占据我们设备的大量存储空间。通常情况下&#xff0c;我们选择删除视频以释放内存&#xff0c;但这将永久丢失它们。然而&#xff0c;有一种更好的方法可以在不删除视频的情况下减小内存占用&#xff…

Azure如何调整虚拟机的大小

参考 https://blog.csdn.net/m0_48468018/article/details/132267096 创建虚拟机进入资源&#xff0c;点击大小选项&#xff0c;并对大小进行调整 点击如下图的cloud shell,进入Azure CLI,使用az vm resize 进行大小调整 命令中的g对应资源组&#xff0c;n对应虚拟机名称&am…