?? powell.m
字號:
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;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -