用Ceres-Solver求解非线性最小二乘问题

本文介绍了如何使用Ceres-Solver解决非线性最小二乘问题,通过分析Ceres求解过程,展示了如何定义代价函数类、添加残差项和配置求解选项。例子涵盖单个变量、多个残差项和多维向量情况,以及模型拟合问题,强调了损失函数在减少外点影响中的作用。
摘要由CSDN通过智能技术生成

简介

Ceres-Solver是谷歌推出的开源C++库,用于求解优化问题。本文主要介绍用Ceres求解优化问题中最常见的最小二乘问题。例程来源于官网中Tutorial: Non-linear Least Squares章节, Ceres版本为1.14.

最小二乘问题

从官方文档看,Ceres可以求解如下问题:

x ∗ = arg min ⁡ x ∑ i ρ i ( ∣ ∣ f i ( x i 1 , x i 2 , . . . , x i k ) ∣ ∣ 2 ) s . t . l j ≤ x j ≤ u j x^* = \argmin_x \sum_i \rho_i(||f_i(x_{i_1},x_{i_2},...,x_{i_k})||^2) \\ s.t. \quad l_j \le x_j \le u_j x=xargminiρi(∣∣fi(xi1,xi2,...,xik)2)s.t.ljxjuj

传统的优化问题可以描述为:选择一组参数(变量),在满足一系列有关的限制条件(约束)下,使设计指标(目标)达到最优值。据此来分析上述公式:

变量

ceres可以优化多个变量,式中的 x x x就是待优化变量(下文简称变量或自变量)的集合。再次强调, x x x是变量的集合,每个变量都是向量,它们的维度可以不同。

约束

公式中仅仅对单个变量的上下限进行了约束,这看上去并不完备,因为传统优化问题可能会对多个变量做整体约束。但是在官方的Tutorial: Non-linear Least Squares章节中,约束不作为讨论的重点。

目标

从式中可以看出,待优化的目标是是多个项目的累加。沿用Ceres的命名方式,我们称每个项为"残差项"。

在Ceres中,残差项是处理的最小单元。每个残差项可以写成:

R i = ρ i ( ∣ ∣ f i ( x i ) ∣ ∣ 2 ) R_i = \rho_i(||f_i(x_i)||^2) Ri=ρi(∣∣fi(xi)2)

其中
x i = { x i 1 , x i 2 , . . . , x i k } , x i ∈ x x_i = \{x_{i_1},x_{i_2},...,x_{i_k}\}, \quad x_i \in x xi={ xi1,xi2,...,x

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值