資源簡介
DFP 二元搜索
代碼片段和文件信息
function?[Xkfx0]=DFP(f?X0?var?eps)
%初始化符號函數,梯度,維數等
syms?var?t;
g?=?jacobian(f)‘;???%Jacobian轉置->Grad
fx?=?matlabFunction(f);?%符號函數->函數句柄(R2009以上支持)
gx?=?matlabFunction(g);
n?=?length(var);????%維數
X?=?X0;?Xk?=?X0;
while?1
????fx0?=?fx(X(1)X(2));???gx0?=?gx(X(1)X(2));
????Hk?=?eye(n);??%n*n單一矩陣
????Pk?=?-gx0;??%初始方向?
????k?=?0;??%迭代次數
????while?1
????????Y?=?Xk?+?t*Pk;
????????y?=?fx(Y(1)Y(2));
????????tk=Gold(y1.0e-2);
????????Xk?=?Xk?+?tk*Pk;
????????fx1?=?fx(Xk(1)Xk(2));
????????gx1?=?gx(Xk(1)Xk(2));
????????if?norm(gx1)?????????????X?=?Xk;?fx0?=?fx1;
????????????break;
????????end
????????Sk?=?Xk?-?X;????Yk?=?gx1?-?gx0;
????????Hk?=?Hk?+?Sk*Sk‘/(Sk‘*Yk)?-?Hk*(Yk)*Yk‘*Hk/(Yk‘*Hk*Yk);
????????Pk?=?-Hk*gx1;???%校正方向
????????k?=?k+1;
????end
????if?norm(gx1)?????????disp(‘X(k+1)?=?‘);??disp(Xk);
????????disp(‘F(K+1)?=?‘);??disp(fx0);
????????break;
????end
end
function?t?=?Gold(feps)
%利用黃金分割法求步長
%此處顯示詳細說明
%?[ab]=minJT(f00.1eps);
a=-0.5;
b=1;
d=b-a;
c=0.618;
ta=a+c*(b-a);
tb=a+(1-c)*(b-a);
k=0;
%?fx=matlabFunction(f);
while?d>eps?
%?fa=fx(ta);
%?fb=fx(t
評論
共有 條評論