生活随笔
收集整理的這篇文章主要介紹了
【Matlab学习手记】线搜索Goldstein准则
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
function [lam, newxk, fk, newfk] = Opt_Goldstein(xk, dk)
a = 0; % 搜索下界
b = 10; % 搜索上界
lam = 1; % 初始點
c1 = 0.25;
c2 = 0.75;
t = 2;
% 循環求解最佳的步長
while a < b % 搜索步長滿足 Goldstein 第一個準則 if fun(xk + lam*dk) <= fun(xk) + c1*lam*gfun(xk)'*dk % 搜索步長滿足 Goldstein 第二個準則 if fun(xk + lam*dk) >= fun(xk) + c2*lam*gfun(xk)'*dk% 輸出最佳的步長 newxk = xk + lam*dk;fk = fun(xk);newfk = fun(newxk);break; % 搜索步長不滿足 Goldstein 準則,繼續迭代 else a = lam; lam = 0.5*(a + b); if b < inf lam = 0.5*(a + b); else lam = t*lam; end end else b = lam; lam = 0.5*(a + b); end if abs(a - b) < 1e-3break;end
endfunction f=fun(x)
f = 100*(x(1)^2 - x(2))^2 + (x(1)-1)^2;function gf=gfun(x)
gf = [400*x(1)*(x(1)^2 - x(2)) + 2*(x(1) - 1);-200*(x(1)^2 - x(2))];
?
總結
以上是生活随笔為你收集整理的【Matlab学习手记】线搜索Goldstein准则的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。