资源简介
matlab代码////增广拉格朗日算法////精确步长、可调节函数、可调节步长等等,
ALM(增广拉格朗日算法)被认为最常用的约束优化算法、运用二阶信息、拉格朗日乘子、罚项转为无约束优化
代码片段和文件信息
function [x delta] = BFGS_exact(f_originClambdamu)
% BFGS法确定多个变量的最优解
%
% 输入:
% x0:当前点;
% Iter_max:最大迭代次数;
% 输出:
% x:最优解;
%
Iter_max = 20; %函数参数的个数,x1x2x3...的个数
x0 = [11]; %初始值
eps = 1e-2; %迭代容忍度
ite = 1; % 循环次数
f111 = f_origin-lambda.*C+mu.*(C)^2/2;
g111=gradient(f111);
gk = BFGS_Gradient(g111x0); % 初始梯度
H = eye(length(x0)); % 初始H阵
d = -gk*H‘; % 初始搜索方向
alpha = exact_buchang(f111x0d‘); % 初始搜索步长
while norm(gk) > eps && ite< Iter_max
x0 = x0 + alpha.*d; % 新的循环点
gkk = BFGS_Gradient(g111x0); % 新的梯度
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 = exact_buchang(f111x0d‘); % 新的搜索步长
gk = gkk; % 更新梯度
ite = ite + 1; % 循环次数加1
end
x = x0 + alpha.*d; % 极小值
delta=BFGS_Gradient(g111x);
% 梯度矩阵
function g = BFGS_Gradient(g11x0)
temp = sym(‘x‘[12]);
g=(double(subs(g11tempx0)))‘;
end
end
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1075 2020-04-14 22:51 第五题增广拉格朗日法\BFGS_exact.m
文件 334 2020-04-14 22:47 第五题增广拉格朗日法\exact_buchang.m
文件 493 2020-04-14 23:16 第五题增广拉格朗日法\main.m
- 上一篇:MATLAB电机仿真精华50例
- 下一篇:基于颜色的聚类分割matlab
评论
共有 条评论