一、介绍
Powell算法是图像配准里面的常用的加速算法,可以加快搜索速度,而且对于低维函数的效果很好,所以本篇博客主要是为了介绍Powell算法的原理以及实现。
由于网上已经有了对于Powell算法的讲解,所以我只是把链接放出来(我觉得自己目前还没有这个讲解的能力),大家自己去了解。
放在这里主要也是为了节省大家搜索的时间。(都是我辛辛苦苦搜出来的^-^)。
二、预备知识
了解一维搜索算法:进退法,消去法,黄金分割法
三、鲍威尔算法
具体原理阅读这里:
四、matlab代码实现一个简单函数的求解
这个代码的程序与思路很是简洁,我觉得写得很好。
原文代码放在这里:
文件:MyPowell.m
function MyPowell()
syms x1 x2 x3 a;
f=10*(x1+x2-5)^4+(x1-x2+x3)^2 +(x2+x3)^6;
error=10^(-3);
D=eye(3);
x0=[0 0 0]‘;
for k=1:1:10^6MaxLength=0;x00=x0;m=0;if k==1,s=D;endfor i=1:3x=x0+a*s(:,i);
ff=subs(f,{x1,x2,x3},{x(1),x(2),x(3)});
t=Divide(ff,a); %调用了进退法分割区间
aa=OneDemensionslSearch(ff,a,t); %调用了0.618法