Powell算法的原理与实现

1. 概述

在研究课题中需要最优化多模态图像的互信息,引入的最优化算子便是Powell算子。Powell算子是一种有效的直接搜索方法,这种方法本质上是共轭方向法。Powell算子把整个计算过程分成若干个阶段,每一个阶段(一轮迭代)有n+1次一位搜索组成。在算法的每一阶段中,先依次沿着已知的n个方向搜索,得一个最好点,然后沿着本阶段的初点与该最好点连线方向进行搜索,求得这一阶段的最好点。在用最后的搜索方向取代前n个方向之一,开始下一阶段的迭代。算法过程如下:


但是因为在实际使用过程中可能找到的新的搜索方向与原有的搜索方向之间可能存在着互相关的情况,这就需要改进了下一个最优化搜索方向的选择。因而改进的Powell方法(Sargent形式)与原来方法的主要区别在于替换方向的规则不同。改进的Powell方法,当初始搜索方向线性无关时,能够保证每轮迭代中以搜索方向为列的行列式不为零,因此这些方向是线性无关的。而且随着迭代的延续,搜索方向接近共轭的程度逐渐增加。

2. 实现

注:由于这里贴出的Powell算子是基于课题的需要修改过的,在可能在您的使用中需要进行适当的修改

%优化搜索算法
function [RegistrationParameters]=Powell(A, B, pre_parameters)
e=0.1;
X0=[0 0 0]; %初始搜索点
X0(1) = pre_parameters(1)/10.0; %设置预先定义的搜索初始点
X0(2) = pre_parameters(2)/10.0;
X0(3) = pre_parameters(3);
D=[1 0 0;
    0 1 0;
    0 0 1]; %用单位矩阵去构造初始的搜索方向
while(1)
    d1=D(1,:);
    [X1,fX1]=OneDimensionSearch(X0,d1,A, B);
    d2=D(2,:);
    [X2,fX2]=OneDimensionSearch(X1,d2,A, B);
    d3=D(3,:);
    [X3,fX3]=OneDimensionSearch(X2,d3,A, B);
    fX0=PV(X0(1),X0(2),-X0(3),A, B);
    Diff=[fX1-fX0 fX2-fX1 fX3-fX2];
    [maxDiff,m]=max(Diff);
    d4=X3-X0;       %生成的新的搜索方向
    temp1=X3-X0;    %计算新算出来的最小值点与之前搜索起点的的差距
    Conditon1=sum(temp1.*temp1);
    if Conditon1<e
        break
    end
    [X4,fX4,landa]=OneDimensionSearch(X0,d4,A, B);
    X0=X4;
    temp2=X4-X3;
    Conditon2=sum(temp2.*temp2);
    if Conditon2<=e
        X3=X4;
        break;
    end
    temp3=sqrt((fX4-fX0)/(maxDiff+eps));
    if(abs(landa)>temp3)
        D(4,:)=d4;
        for i=m:3
            D(i,:)=D(i+1,:);
        end
    end
end
RegistrationParameters(1)=-X3(1);
RegistrationParameters(2)=-X3(2);
RegistrationParameters(3)=-X3(3);
RegistrationParameters(4)=fX3;
  • 7
    点赞
  • 40
    收藏 更改收藏夹
  • 打赏
    打赏
  • 16
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m_buddy

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值