POWELL.m
上传用户:xueli1969
上传日期:2022-07-27
资源大小:19k
文件大小:2k
源码类别:

通讯编程文档

开发平台:

Matlab

  1. function [OUT]=POWELL(handles)
  2. F= handles.I;  
  3. R= handles.J; % reference image
  4. len=10;
  5. %方向矢量矩阵存放d1,d2,d3三个方向矢量
  6. D=[1 0 0;
  7.     0 1 0;
  8.     0 0 1];
  9. %从起始点X0出发,沿方向d3进行搜索,得到最大值fZ,对应点为Z。
  10. X0=[0 0 0];
  11. d3=D(3,:);
  12. [Z,fZ,step]=oneDimSearch(R,F,X0,d3,len,handles);
  13. %从Z出发,沿方向d1进行搜索,得到最大值fX1,对应点为X1。
  14. d1=D(1,:);
  15. [X1,fX1,step]=oneDimSearch(R,F,Z,d1,len,handles);
  16. %从X1出发,沿方向d2进行搜索,得到最大值fX2,对应点为X2。
  17. d2=D(2,:);
  18. [X2,fX2,step]=oneDimSearch(R,F,X1,d2,len,handles);  
  19. %从X2出发,沿方向d3进行搜索,得到最大值fX3,对应点为X3。
  20. d3=D(3,:);
  21. [X3,fX3,step]=oneDimSearch(R,F,X2,d3,len,handles);
  22. Cha=[fZ-fX1 fX1-fX2 fX2-fX3];
  23. [maxCha,j0]=max(Cha);
  24.  e=9;  
  25.  FANSHU=X3-X0;
  26.  Y=sum( FANSHU.*FANSHU );
  27.  aaa=0;
  28. while(  Y>e )
  29.     aaa=aaa+1;
  30.         % d为这一轮产生的新方向向量 
  31.         d=X3-Z;
  32.         %从点X3出发沿d进行一轮搜索,得到最大值fZ1,对应点Z1以及到达极值点的步长landa。
  33.         [Z1,fZ1,landa]=oneDimSearch(R,F,X3,d,len,handles);
  34.         temp=sqrt( (fX3-fZ1)/maxCha );
  35.         %判断是否替换方向向量
  36.         if( abs(landa) <= temp )
  37.               %共轭性没有得到增强,不替换方向向量,重新进行搜索,不过X0换成Zk1,即起始点换成Zk1。
  38.               X0=Z1;
  39.            else
  40.               %共轭性得到增强,替换选定的方向向量d_j0。d_j0=d_j0+1,....,d_n=d。并用X3替换X0。然后从Zk1出发重新进行搜索
  41.               D(4,:)=d;
  42.                 for i=j0:3
  43.                      D(i,:)=D(i+1,:);
  44.                 end
  45.               X0=Z1;
  46.         end
  47.         
  48.         
  49.         %%%%%%
  50.               %从起始点X0(已被Z1替代)出发,沿方向d3进行搜索,得到最大值fZ,对应点为Z。
  51.             
  52.               d3=D(3,:);
  53.               [Z,fZ,step]=oneDimSearch(R,F,X0,d3,len,handles);
  54.               %从Z出发,沿方向d1进行搜索,得到最大值fX1,对应点为X1。
  55.               d1=D(1,:);
  56.               [X1,fX1,step]=oneDimSearch(R,F,Z,d1,len,handles);
  57.               %从X1出发,沿方向d2进行搜索,得到最大值fX2,对应点为X2。
  58.               d2=D(2,:);
  59.               [X2,fX2,step]=oneDimSearch(R,F,X1,d2,len,handles);  
  60.               %从X2出发,沿方向d3进行搜索,得到最大值fX3,对应点为X3。
  61.               d3=D(3,:);
  62.               [X3,fX3,step]=oneDimSearch(R,F,X2,d3,len,handles);
  63.               Cha=[fZ-fX1 fX1-fX2 fX2-fX3];
  64.               [maxCha,j0]=max(Cha);
  65.               
  66.               FANSHU=X3-X0;
  67.               Y=sum( FANSHU.*FANSHU );
  68.        %%%%%%
  69.   end
  70.   OUT(1)=X3(2); 
  71.   OUT(2)=X3(1); 
  72.   OUT(3)=-X3(3); 
  73.   OUT(4)=fX3; 
  74.   
  75.