POWELL.m
资源名称:cx9.rar [点击查看]
上传用户:xueli1969
上传日期:2022-07-27
资源大小:19k
文件大小:2k
源码类别:
通讯编程文档
开发平台:
Matlab
- function [OUT]=POWELL(handles)
- F= handles.I;
- R= handles.J; % reference image
- len=10;
- %方向矢量矩阵存放d1,d2,d3三个方向矢量
- D=[1 0 0;
- 0 1 0;
- 0 0 1];
- %从起始点X0出发,沿方向d3进行搜索,得到最大值fZ,对应点为Z。
- X0=[0 0 0];
- d3=D(3,:);
- [Z,fZ,step]=oneDimSearch(R,F,X0,d3,len,handles);
- %从Z出发,沿方向d1进行搜索,得到最大值fX1,对应点为X1。
- d1=D(1,:);
- [X1,fX1,step]=oneDimSearch(R,F,Z,d1,len,handles);
- %从X1出发,沿方向d2进行搜索,得到最大值fX2,对应点为X2。
- d2=D(2,:);
- [X2,fX2,step]=oneDimSearch(R,F,X1,d2,len,handles);
- %从X2出发,沿方向d3进行搜索,得到最大值fX3,对应点为X3。
- d3=D(3,:);
- [X3,fX3,step]=oneDimSearch(R,F,X2,d3,len,handles);
- Cha=[fZ-fX1 fX1-fX2 fX2-fX3];
- [maxCha,j0]=max(Cha);
- e=9;
- FANSHU=X3-X0;
- Y=sum( FANSHU.*FANSHU );
- aaa=0;
- while( Y>e )
- aaa=aaa+1;
- % d为这一轮产生的新方向向量
- d=X3-Z;
- %从点X3出发沿d进行一轮搜索,得到最大值fZ1,对应点Z1以及到达极值点的步长landa。
- [Z1,fZ1,landa]=oneDimSearch(R,F,X3,d,len,handles);
- temp=sqrt( (fX3-fZ1)/maxCha );
- %判断是否替换方向向量
- if( abs(landa) <= temp )
- %共轭性没有得到增强,不替换方向向量,重新进行搜索,不过X0换成Zk1,即起始点换成Zk1。
- X0=Z1;
- else
- %共轭性得到增强,替换选定的方向向量d_j0。d_j0=d_j0+1,....,d_n=d。并用X3替换X0。然后从Zk1出发重新进行搜索
- D(4,:)=d;
- for i=j0:3
- D(i,:)=D(i+1,:);
- end
- X0=Z1;
- end
- %%%%%%
- %从起始点X0(已被Z1替代)出发,沿方向d3进行搜索,得到最大值fZ,对应点为Z。
- d3=D(3,:);
- [Z,fZ,step]=oneDimSearch(R,F,X0,d3,len,handles);
- %从Z出发,沿方向d1进行搜索,得到最大值fX1,对应点为X1。
- d1=D(1,:);
- [X1,fX1,step]=oneDimSearch(R,F,Z,d1,len,handles);
- %从X1出发,沿方向d2进行搜索,得到最大值fX2,对应点为X2。
- d2=D(2,:);
- [X2,fX2,step]=oneDimSearch(R,F,X1,d2,len,handles);
- %从X2出发,沿方向d3进行搜索,得到最大值fX3,对应点为X3。
- d3=D(3,:);
- [X3,fX3,step]=oneDimSearch(R,F,X2,d3,len,handles);
- Cha=[fZ-fX1 fX1-fX2 fX2-fX3];
- [maxCha,j0]=max(Cha);
- FANSHU=X3-X0;
- Y=sum( FANSHU.*FANSHU );
- %%%%%%
- end
- OUT(1)=X3(2);
- OUT(2)=X3(1);
- OUT(3)=-X3(3);
- OUT(4)=fX3;