⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bfgs.txt

📁 BFGS算法代码 BFGSMethod Matlab语言
💻 TXT
字号:
function [x,y,value]=BFGSMethod(f,x0)
% 功能:BFGS方法
% 说明:待优化的函数f是关于二元变量(xi,yi)的符号表达式
% 时间:2007.4.13 23:15

% 测试用例:
%syms xi yi
%f=(xi-1)^2+100*(yi-xi^2)^2;
%x0=[-2,4];

% 测试结果:
%times=38
%value=9.0342e-013
%x=1
%y=1

N=100; % 循环次数上限 
err=0.001; % 退出循环误差
times=1; % 循环次数

g=jacobian(f); % 梯度矩阵
xi=x0(1); yi=x0(2); % 初始点
gk=subs(g); % 初始梯度 
H=eye(2); % 初始H阵
d=-gk*H'; % 初始搜索方向
[alpha,fvalue]=linesearch(f,[xi,yi],d); % 初始搜索步长

while norm(gk)>err & times<=N-1
xi=xi+alpha*d(1); yi=yi+alpha*d(2); % 新的循环点
gkk=subs(g); % 新的梯度
y=gkk-gk; s=alpha*d; % 梯度差,迭代点差
H=H+(1+(y*H*y')/(s*y'))*(s'*s)/(s*y')-(s'*y*H+H*y'*s)/(s*y'); % H阵更新
d=-gkk*H'; % 新的搜索方向
[alpha,fvalue]=linesearch(f,[xi,yi],d); % 新的搜索步长
gk=gkk; % 更新梯度
times=times+1; % 循环次数加1
end
value=fvalue; % 最终的函数值(极小值)
x=xi+alpha*d(1); % 极小值点坐标 
y=yi+alpha*d(2); 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -