資源簡介
擬牛頓法和最速下降法一樣只要求每一步迭代時知道目標函數的梯度。通過測量梯度的變化,構造一個目標函數的模型使之足以產生超線性收斂性。這類方法大大優于最速下降法,尤其對于困難的問題。另外,因為擬牛頓法不需要二階導數的信息,所以有時比牛頓法更為有效。如今,優化軟件中包含了大量的擬牛頓算法用來解決無約束,約束,和大規模的優化問題。本程序是擬牛頓法-bfgs算法的matlab代碼。
代碼片段和文件信息
function?[xvalk]=bfgs(fungfunx0)
%功能:用BFGS算法求解無約束問題:min?f(x)
%?輸入:x0是初始點,fungfun分別是目標函數及其梯度;
%varargin是輸入可變參數變量,簡單調用bfgs時可以忽略它,
%?但是其他程序循環調用時將會發揮重要作用
%輸出:xval分別是近似最優點和最優值,k是迭代次數。
syms?x1?x2;
maxk=500;???????%給出最大迭代次數
rho=0.55;?sigma=0.4;?epsilon=1e-5;??????%給出一些常數參數及精度誤差
k=0;?n=length(x0);
Bk=eye(n);??????%Bk=feval(‘Hesse‘x0);
while(k ????gk=feval(gfunx0);??????%計算精度
????if(norm(gk) ????????break;
????end????????????????????
評論
共有 條評論