资源简介
实现拉格朗日松弛算法,可以较快完成算法迭代,基于Matlab软件实现
代码片段和文件信息
function [x itr] = ALH( x f g G H Dg Hg e k eta)
%AUGMENTED_LAGRANGIAN
itr = 0; %initialize iteration counter
numV = length(x); % number or variables
numC = size(g(x) 1); % number of constraints / dual variables
y = zeros(numC 1 ); %Lagrange multipliers
ALk = @(x)(f(x) - y‘*g(x) + 0.5*k*(norm(g(x)))^2); % Augmented Lagrangian
DALk = @(x)(G(x) - Dg(x)*y + k*Dg(x)*g(x)); % gradient of Augmented Lagrangian
%Hessian of Augmented Lagrangian
function HA = HALk(x)
HA = H(x)+ k*Dg(x)*Dg(x)‘;
for i = 1:numC
HA = HA - Hg{i}(x)*y(i) + k*Hg{i}(x)*gi(i); % hessian of AL
end
end
while (norm(g(x)) >= e)
gi = g(x);
[x nsteps] = newton(x ALk DALk @HALk e eta true);
y = y - k * g(x);
itr = itr + 1;
fprintf( ‘Iteration: %d Newton Steps: %d Constraint Violation: %s x: %s \n‘ itr nsteps num2str(g(x)‘) num2str(x‘));
end
fprintf(‘Augmented Langragian method\n‘);
fprintf(‘Number of Iterations: %d\n‘ itr);
for i = 1:numV
fprintf(‘x(%d): %8.4f\n‘ i x(i));
end
fprintf(‘f(x): %8.4f\n‘ f(x));
fprintf(‘g(x): %s\n‘ num2str(g(x)‘));
fprintf(‘k: %f\n‘ k);
end
function [x itr] = newton(x f G H e eta isprint)
itr = 0; %initialize iteration counter
numV = length(x); % number or variables
%Computation loop
while norm(G(x)) > e
% primal regularization
lambda = 1e-5;
[~p] = chol((H(x) + lambda * eye(numV )));
while p ~= 0
lambda = 10 * lambda;
[~p] = chol((H(x) + lambda * eye(numV )));
end
dxs = -((H(x) + lambda * eye(numV ))\G(x));
alpha = 1;
while ((f(x + alpha * dxs) - f(x)) >= eta * alpha * G(x)‘ *dxs);
alpha = alpha/2;
end
x = x + alpha * dxs;
itr = itr + 1; %counter+1
if isprint
fprintf( ‘Iteration: %d f(x): %f x: %s e: %f \n‘ itr f(x) num2str(x‘) e);
end
end
end
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4259 2015-11-13 20:16 拉格朗日\AL.zip
文件 2085 2012-10-28 08:40 拉格朗日\ALH.m
文件 1317 2013-04-11 09:35 拉格朗日\license.txt
文件 3772 2008-09-01 14:52 拉格朗日\multiplier.f90
文件 1835 2012-10-25 10:50 拉格朗日\newton_constrained.m
文件 2143 2012-10-25 09:48 拉格朗日\prob1.m
文件 2278 2012-10-28 08:41 拉格朗日\prob2.m
目录 0 2015-11-16 20:57 拉格朗日\
相关资源
- 增广拉格朗日法.zip
- MATLAB拉格朗日插值法程序
- 预报误差法参数辨识-松弛算法(单输
- 求解二次规划问题的拉格朗日及有效
- matlab求已知数据点的拉格朗日插值多
- 增广拉格朗日方法MATLAB程序
- MATLAB教学视频:详解数据插值的MATL
- 预报误差法参数辨识-松弛算法(原理
- 增广拉格朗日乘子法matlab源码
- 增广拉格朗日乘子法ALM算法matlab代码
- MATLAB实现拉格朗日插值
- 拉格朗日多项式插值lagrange.m
- 基于MATLAB的乘子法
- 增广拉格朗日算法 GUI
- matlab牛顿拉格朗日算法
- 机器人动力学-拉格朗日方法matlab.ra
- matlab 拉格朗日插值及akima插值
评论
共有 条评论