ceres快速教材及学习笔记(三)鲍威尔方程Powell’s Function

0. 前言

本文是根据ceres官方教程内容ceres-solver官方教程链接,再结合自己理解的一个ceres快速学习笔记。
在博文ceres快速教材及学习笔记(一)hello,world!中,我们学习了

  • 最小二乘问题数学模型;
  • 弄清楚了各个参数的意义;
  • 利用学习的最小二乘问题数学模型和ceres解决了一个最简单的最小二乘问题;

在博文ceres快速教材及学习笔记(二)曲线拟合,稍复杂的例子,中,我们学会了怎样使用多个参数块,如何添加多个误差项。接下来在此基础上我们来求解更加复杂的问题,以处理如何使不同的误差项有不同代价函数以及参数块的情况。

1.鲍威尔方程

1.1. 问题

E q ( 1 ) : min ⁡ x 1 2 ∑ ∥ F ( x ) ∥ 2 F ( x ) = [ f 1 ( x ) ,   f 2 ( x ) ,   f 3 ( x ) ,   f 4 ( x ) ] f 1 ( x ) = x 1 + 10 x 2 f 2 ( x ) = 5 ( x 3 − x 4 ) f 3 ( x ) = ( x 2 − 2 x 3 ) 2 f 4 ( x ) = 10 ( x 1 − x 4 ) 2 Eq(1) : \quad \min_{x} \frac{1}{2}\sum \|F(x)\|^2\\ F(x) = \left[f_1(x),\ f_2(x),\ f_3(x),\ f_4(x) \right]\\ f_1(x) = x_1 + 10x_2\\ f_2(x) = \sqrt{5} (x_3 - x_4)\\ f_3(x) = (x_2 - 2x_3)^2\\ f_4(x) = \sqrt{10} (x_1 - x_4)^2\\ Eq(1):xmin21F(x)2F(x)=[f1(x), f2(

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
powell方法是计算最值的有效方法,一般情况下是无约束的,目前Powell已发展了一种称为BOBYQA的带区间约束算法。 压缩文件里面optimization.h是无约束powell寻优的一个类,以前在baidu上找到的。powell.h和powell.cpp是带区间约束的powell算法BOBYQA的C++包装,由于BOBYQA算法只能计算二维以上,一维算法是俺自己写的。调用时,一维算法采用ExecuteBrent,二维以上采用BoundedPowell。 BOBYQA目录下是powell方法祖师爷M. J. D. Powell写的FORTRAN代码,powell.lib是俺把Fortran代码编译成的静态库。由于这个lib是Fortran Power Station 4.0做的,msfrt40.dll就成了一个甩不掉的累赘。 如果使用Fortran编程的话,就不需要俺的包装了,直接用Fortran代码吧。 使用方法请参考Fortran代码中main.f,有问题请联系baita00@yahoo.com.cn。 另外链接时好像还需要fps4.0中的msfrt.lib,原来没有加进去,现在加不进去了。需要的话请邮件联系。 鉴于很多同志不清楚用法,下面略加说明。 BoundedPowell函数的参数说明。 第一个参数,待优化函数的指针,这个函数必须定义成_stdcall类型,其本身带有个参数,第一个参数是优化变量个数,第二个参数是优化变量数组,第个参数就是函数的值,由于使用Fortran的关系,这几个参数都必须传递地址。 举例说,假定待优化函数为f(x)=x^2,那么只有一个参数,这个函数应该定义为 void _stdcall objfun(int *n, double *para, double *f) { *f=para[0]*para[0]; } 第二个参数int n,待优化计算变量的个数 第个参数double *x, 待优化变量,这是一个数组,长度为n 第四个参数double *xlb,变量的下界,数组 第五个参数double *xub,变量的上界,数组 第五个参数double rhobeg,第六个参数double rhoend,这两个参数是Powell同志定义的两个半径,具体我也说不清楚,你想搞清楚的话可以搜Powerll同志的文献。一般你把rhobeg设置为1,rhoend设置为计算的精度,比如你希望精度为万分之一,rhoend就为1e-4。 第七个参数int maxfun,最大迭代次数 第八个参数,BOBYQA计算时的返回代码,具体如下 // //BOBYQA iflag返回值的含义: //IFLAG=1, Return from BOBYQA because NPT is not in the required interval //IFLAG=2, Return from BOBYQA because one of the differences XU(I)-XL(I)/6X is less than 2*RHOBEG. //IFLAG=3, Return from BOBYQA because FCN has been called MAXFUN times. //IFLAG=4, Return from BOBYQA because of much cancellation in a denominator. //IFLAG=5, Return from BOBYQA because a trust region step has failed to reduce Q. //

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值