【算法系列】非线性最小二乘求解-直接求解法

news2025/1/4 17:05:21

系列文章目录

·【算法系列】卡尔曼滤波算法

·【算法系列】非线性最小二乘求解-直接求解法

文章目录

系列文章

文章目录

        前言

        算法推导

        总结


前言

SLAM问题常规的解决思路有两种,一种是基于滤波器的状态估计,围绕着卡尔曼滤波展开;另一种则是基于图论(因子图)的状态估计,将SLAM问题建模为最小二乘问题,而且一般是非线性最小二乘估计去求解。

非线性最小二乘有多种解法,本篇博客介绍直接求解的方法。


算法推导

非线性最小二乘的一般形式如下:

\underset{x}{min}\sum \left \| y_{i}-f(x_{i}) \right \|^{2}_{\sum _{i}^{-1}}

其中f(x_{i})是非线性函数,\sum{_{i}^{-1}}表示协方差矩阵

首先对f(x)进行线性化近似,这样就能把非线性最小二乘转化成线性最小二乘,然后直接求解线性方程就可以得到解。

一般线性化的方法都是使用泰勒展开进行线性化,对精度要求不高时尝尝采用一阶泰勒展开,在x0处进行泰勒展开:

f(x_{i})\approx f(x_{0_{i}})+f`(x_{i})(x_{i}-x_{0_{i}})

将展开后的式子带入到目标函数,并将协方差矩阵开方后放到平方运算中得到下式:

\underset{x}{min}\sum \left \| y_{i}-f(x_{i}) \right \|^{2}_{\sum _{i}^{-1}}=\underset{x}{min}\sum\left \| \sum {_{i}^{-1/2}} (y_{i}-f(x_{0_{i}})F_{i}x_{0_{i}})-\sum {_{i}^{-1/2}}F_{i}x_{i} \right \|^{2}

将前面可以求出的常数项整体用b_{i}表示,后面待求项x_{i}的系数用A_{i}表示整理一下得到:

\underset{x}{min}\sum \left \| b_{i}-A_{i}x_{i} \right \|^{2}

在理想情况下,\sum \left \| b_{i}-A_{i}x_{i} \right \|^{2}可以取到最小值0,就相当于其中的每一项b_{i}-A_{i}x_{i}取到最小值0,其实就是解下面这个线性方程组:

Ax=b

在平常求解线性方程组时直接两边左乘A的逆就求出解x=A^{-1}b,但A一般不可逆,这时往往求该方程组的数值解,一般使用的方法时Cholesky分解和QR分解。

Cholesky分解方法:

Cholesky分解是在原来的式子两边左乘A的转置,然后利用Cholesky分解将A^{T}A分解成n×n的上三角矩阵R的乘积R^{T}R,再令新的变量y=Rx,就得到了新的线性方程组R^{T}y=A^{T}b

Ax=b\Leftrightarrow (A^{T}A)x=A^{T}b\Leftrightarrow R^{T}y=A^{T}b

因为R是上三角矩阵,其转置后为下三角矩阵,第一行只有一个变量,行数越往下变量越多,于是从上到下很容易依次解出y,然后再解线性方程组Rx=y,而这个方程组最后一行只有一个变量,自下而上也可以很容易的解出x,这样原方程组就可以求解出来了。

QR分解:

QR分解比Cholesky分解更加精准和稳定,利用QR分解将A分解为Q矩阵和R矩阵的乘积,其中Q是正交矩阵,R是上三角矩阵,然后在方程组两边同时左乘Q的逆对方程进行化简,如下:

(QR)x=b\Leftrightarrow Rx=Q^{-1}b

R是上三角矩阵,很容易就能求出x。


总结

在实际的SLAM问题中,非线性最小二乘很难找到合适的线性化方法,仅仅使用一阶泰勒展开进行近似有时会产生较大的误差;而且代价函数的误差往往也不能最小化到0值,所以直接求解的方法在现实中的应用存在诸多问题。

所以下面的博客将介绍优化的方法求解非线性最小二乘问题,这种方法在实践中是比较常用的。

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

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

相关文章

深度学习入门(三十九)计算性能——分布式训练、参数服务器(TBC)

深度学习入门(三十九)计算性能——分布式训练、参数服务器前言计算性能——分布式训练、参数服务器课件(分布式训练)分布式计算GPU机器架构计算一个小批量同步SGD性能性能的权衡实践的建议总结教材(参数服务器&#xf…

Lazada如何申请入驻Lazmall品牌商城,会给商家带来哪些权益

Lazmall入驻标准&权益 &#xff08;1&#xff09;Lazmall申请要求:①每月至少售出1单②Seller Rating 270%③Cancellation Rate (取消率) < 2%④Ship on Time及时发货率2 90%⑤Return Rate退货率≤1%⑥店铺至少有10件在线产品⑦店铺有装修⑧店内没有OEM/NO BRAND产品 …

微服务介绍与 SpringCloud Eureka

哈喽~大家好&#xff0c;前端时间我们完结了JavaEE框架篇&#xff0c;从现在开始呢&#xff0c;开始了微服务章节了&#xff0c;这篇就来看看微服务介绍与 SpringCloud Eureka。 &#x1f947;个人主页&#xff1a;个人主页​​​​​ &#x1f948; 系列专栏&…

linux级联中断控制器的处理流程

本篇文章是通过学习韦东山老师的中断子系统相关章节而成。 这里写自定义目录标题1. 下级中断控制器的类别1.1 链式中断控制器(chained)1.2 层级中断控制器(hierarchy)2. 链式(chained)中断控制器的处理流程3. 层级(hierarchy)中断控制器的处理流程4. 处理流程对比4.1 chain的中…

linux和windwos下的磁盘扇区数据查看

目录 一、linux 二、windows 一、linux linux下一切皆文件&#xff0c;磁盘也是一种设备文件。所以我们可以直接编写 C 程序读取磁盘文件数据&#xff0c;依据扇区进行读取。 #define _GNU_SOURCE #include <stdio.h> #include <errno.h> #include <stdlib.h…

二叉树习题-小记

文章目录二叉树相同的树572. 另一棵树的子树110. 平衡二叉树101. 对称二叉树236. 二叉树的最近公共祖先JZ36 二叉搜索树与双向链表105. 从前序与中序遍历序列构造二叉树606 根据二叉树创建字符串二叉树 相同的树 相同的树 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个…

秒杀同龄人的顶级复盘能力,坚持1年,领先5年!

什么是复盘 复盘一词起源于围棋术语&#xff0c;本意是对弈者下完一盘棋之后&#xff0c;重新把过程摆一遍&#xff0c;看哪些地方下得好&#xff0c;哪些不好&#xff0c;总结经验。 在头脑中把过去做的事情“过”一遍&#xff0c;通过对过去的思维和行为进行回顾、反思和探…

使用STM32CubeMX实现LED闪烁

需提前学习&#xff1a;STM32CubeMX新建工程并点亮一个LED&#xff1b; 目录 打开GPIO相关文件 我们需要看的部分 HAL_GPIO_ReadPin&#xff08;&#xff09; HAL_GPIO_WritePin&#xff08;&#xff09; 函数声明 GPIOx GPIO_Pin PinState HAL_GPIO_TogglePin&…

538页21万字数字政府大数据云平台项目建设方案

2 项目建设需求 2.1 项目建设目标 2.2 项目建设内容 2.3 项目建设要求 2.3.1 基础设施服务建设 2.3.2 信息安全服务建设 2.3.3 运行保障服务建设 2.3.4 业务应用支撑建设 3 平台建设方案 3.1 总体建设原则 3.2 总体方案设计 3.2.1 方案设计思路 3.2.2 总体架构设计 …

Spark RDD编程模型及算子介绍(二)

文章目录常见的Action算子常见分区操作算子常见的Action算子 countByKey算子&#xff1a;统计Key出现的次数&#xff0c;部分代码如下&#xff1a; rdd_file sc.textFile("../Data/input/words.txt") rdd_map rdd_file.flatMap(lambda line: line.split(" &…

Mybatis拦截器源码详解

Mybatis拦截器源码详解Mybatis相关全览一、简介执行与添加顺序拦截器生效入口二、使用例子三、原理加载入口生成代理遍历拦截器匹配&生成代理四、实践例子本文用的是3.5.10版本 源码地址&#xff1a;https://github.com/mybatis/mybatis-3/releases 文档地址&#xff1a;ht…

【云原生监控系列第三篇】Prometheus普罗米修斯进阶——PromQL的指标类型

目录一、PromQL 的指标类型1.1 Counter1.2 Gauge1.3 Histogram1.4 Summary1.5 Histogram 与 Summary 的异同二、Prometheus 的聚合函数三、PromQL 的聚合表达式一、PromQL 的指标类型 PromQL 有四个指标类型&#xff1a; Counter &#xff1a;计数器&#xff0c;用于保存单调递…

医疗产品设计的重要性,你了解多少?

医疗产品设计直接关系患者生活的方式与治疗&#xff0c;一个好的医疗产品设计不但要逐渐细化、便于实际操作&#xff0c;而且还要有利于医师操纵&#xff0c;让患者觉得舒服。这是一种具备重大意义的产品。让我们一起来看看有关医疗产品设计的具体内容! 什么叫医疗产品设计? 医…

【Java技术专题】「原理分析系列」Lambda表达式实现原理分析

Lamdba表达式起源 java8引入了lambda表达式是我们java编程方式变革的一个伟大的创举&#xff0c;由了它我们可以采用闭包的形式区开发任何想开发的方法&#xff0c;让java程序与C或者C更加有了贴合的感觉&#xff0c;虽然编程方式和我们目前的命令式编程方式有很大的不同&#…

仿真必修课:计算电磁学入门(附件参考文献与笔记)

转载自电磁CAEer &#xff0c;作者&#xff1a;刘兵 “作为一个电磁设计师&#xff0c;有必要了解计算电磁学吗&#xff1f;” 答案是肯定的。电磁计算从业人员按照分工大致可以分为两类&#xff1a;一类从事CEM&#xff08;计算电磁学&#xff09;&#xff0c;一类从事CAE&a…

ROS 开源项目 TurtleBot3 安装与使用

功能介绍 启动slam完成地图的搭建与保存启动navigation并读取保存的地图&#xff0c;完成自动导航。 注&#xff1a;人工咨询 如果按照下面方案也无法成功解决&#xff0c;可以进入我淘宝咨询&#xff0c;可进行远程辅助解决。 1、安装部分 1.1 创建工作空间lee_ws mkdir…

java项目-第140期ssm高校二手交易平台-ssm毕业设计_计算机毕业设计

java项目-第140期ssm高校二手交易平台-ssm毕业设计_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm高校二手交易平台》 该项目分为2个角色&#xff0c;管理员和用户。 用户在前台浏览商品&#xff0c;并且可以进行购买。用户购买后可以在后台查看自己的订单等…

论文阅读-基于低秩分解的网络异常检测综述

论文地址&#xff1a;基于低秩分解的网络异常检测综述 摘要&#xff1a; 异常检测对于网络管理与安全至关重要&#xff0e;国内外大量研究提出了一系列网络异常检测方法,其 中大多数方法更关注数据包及其独立时序数据流的分析、检测与告警,这类方法仅仅利用了网络数据之 间的…

嵌入式分享合集104

一、不用串口&#xff0c;如何打印STM32单片机log 本文主要介绍在嵌入式开发中用来输出log的方法。 最常用的是通过串口输出uart log&#xff0c;这种方法实现简单&#xff0c;大部分嵌入式芯片都有串口功能。但是这样简单的功能有时候却不是那么好用&#xff0c;比如&#xf…

入门 Activiti 工作流,通俗易懂

概念 工作流。通过计算机对业务流程自动化执行管理&#xff0c;主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程&#xff0c;从而实现某个预期的业务目标&#xff0c;或者促使此目标的实现”。 Activiti7 介绍 Activiti是一个工作…