資源簡介
最優化問題中乘子法在matlab中是實現。

代碼片段和文件信息
function?[xvalk]=bfgs(fungfunx0varargin)
%功能:?用BFGS算法求解無約束問題:??min?f(x)
%輸入:?x0是初始點?fun?gfun分別是目標函數及其梯度;
%?varargin是輸入的可變參數變量?簡單調用bfgs時可以忽略它
%?但若其它程序循環調用該程序時將發揮重要的作用
%輸出:??x?val分別是近似最優點和最優值??k是迭代次數.
maxk=500;???%給出最大迭代次數
rho=0.55;?sigma1=0.4;?epsilon1=1e-5;?
k=0;???n=length(x0);?
Bk=eye(n);???%Bk=feval(‘Hess‘x0);?
while(k ????gk=feval(gfunx0varargin{:});?%計算梯度
????if(norm(gk) ????dk=-Bk\gk;??%解方程組?計算搜索方向
????m=0;?mk=0;
????while(m<20)???%?用Armijo搜索求步長?
????????newf=feval(funx0+rho^m*dkvarargin{:});
????????oldf=feval(funx0varargin{:});
????????if(newf ????????????mk=m;?break;
????????end
????????m=m+1;
????end
????%BFGS校正
????x=x0+rho^mk*dk;??
????sk=x-x0;??yk=feval(gfunxvarargin{:})-gk;
????if(yk‘*sk>0)
????????Bk=Bk-(Bk*sk*sk‘*Bk)/(sk‘*Bk*sk)+(yk*yk‘)/(yk‘*sk);
????end
????k=k+1;?????x0=x;
end
val=feval(funx0varargin{:});?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1083??2009-10-15?20:56??乘子法程序\bfgs.m
?????文件?????????57??2009-10-15?20:26??乘子法程序\df1.m
?????文件?????????53??2009-10-15?21:49??乘子法程序\dg1.m
?????文件?????????42??2009-10-15?20:26??乘子法程序\dh1.m
?????文件????????311??2009-10-15?17:55??乘子法程序\dmpsi.m
?????文件?????????46??2009-10-15?20:26??乘子法程序\f1.m
?????文件?????????44??2009-10-15?21:50??乘子法程序\g1.m
?????文件?????????40??2009-10-15?20:26??乘子法程序\h1.m
?????文件????????365??2009-10-15?17:51??乘子法程序\mpsi.m
?????文件???????1676??2015-06-09?20:22??乘子法程序\multphr.m
?????目錄??????????0??2015-06-05?10:00??乘子法程序
-----------?---------??----------?-----??----
?????????????????3717????????????????????11
- 上一篇:格林函數的公式matlab仿真
- 下一篇:RBF-PID整定
評論
共有 條評論