From d116fea0d9856c92bdcee1ce16618ec10bccb609 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= Date: Fri, 20 Sep 2013 15:56:35 +0200 Subject: [PATCH] Removed useless routines for gradient evaluation (called by csminwell). --- matlab/csminwel1.m | 54 --------------------------- matlab/numgrad2_.m | 60 ------------------------------ matlab/numgrad3_.m | 72 ------------------------------------ matlab/numgrad5_.m | 91 ---------------------------------------------- 4 files changed, 277 deletions(-) delete mode 100644 matlab/numgrad2_.m delete mode 100644 matlab/numgrad3_.m delete mode 100644 matlab/numgrad5_.m diff --git a/matlab/csminwel1.m b/matlab/csminwel1.m index e3f14187b..6b0ea0166 100644 --- a/matlab/csminwel1.m +++ b/matlab/csminwel1.m @@ -81,12 +81,6 @@ if NumGrad [g,badg] = numgrad3(fcn, f0, x0, epsilon, varargin{:}); case 5 [g,badg] = numgrad5(fcn, f0, x0, epsilon, varargin{:}); - case {12, 22} - [g,badg] = numgrad2_(fcn, f0, x0, epsilon, [], varargin{:}); - case {13, 23} - [g,badg] = numgrad3_(fcn, f0, x0, epsilon, [], varargin{:}); - case {15, 25} - [g,badg] = numgrad5_(fcn, f0, x0, epsilon, [], varargin{:}); otherwise error('csminwel1: Unknown method for gradient evaluation!') end @@ -141,18 +135,6 @@ while ~done [g1 badg1] = numgrad3(fcn, f1, x1, epsilon, varargin{:}); case 5 [g1,badg1] = numgrad5(fcn, f1, x1, epsilon, varargin{:}); - case 12 - [g1,badg1] = numgrad2_(fcn, f1, x1, epsilon, [], varargin{:}); - case 13 - [g1,badg1] = numgrad3_(fcn, f1, x1, epsilon, [], varargin{:}); - case 15 - [g1,badg1] = numgrad5_(fcn, f1, x1, epsilon, [], varargin{:}); - case 22 - [g1,badg1] = numgrad2_(fcn, f1, x1, epsilon, abs(diag(H)), varargin{:}); - case 23 - [g1,badg1] = numgrad3_(fcn, f1, x1, epsilon, abs(diag(H)), varargin{:}); - case 25 - [g1,badg1] = numgrad5_(fcn, f1, x1, epsilon, abs(diag(H)), varargin{:}); otherwise error('csminwel1: Unknown method for gradient evaluation!') end @@ -192,18 +174,6 @@ while ~done [g2 badg2] = numgrad3(fcn, f2, x2, epsilon, varargin{:}); case 5 [g2,badg2] = numgrad5(fcn, f2, x2, epsilon, varargin{:}); - case 12 - [g2,badg2] = numgrad2_(fcn, f2, x2, epsilon, [], varargin{:}); - case 13 - [g2,badg2] = numgrad3_(fcn, f2, x2, epsilon, [], varargin{:}); - case 15 - [g2,badg2] = numgrad5_(fcn, f2, x2, epsilon, [], varargin{:}); - case 22 - [g2,badg2] = numgrad2_(fcn, f2, x2, epsilon, abs(diag(H)), varargin{:}); - case 23 - [g2,badg2] = numgrad3_(fcn, f2, x2, epsilon, abs(diag(H)), varargin{:}); - case 25 - [g2,badg2] = numgrad5_(fcn, f2, x2, epsilon, abs(diag(H)), varargin{:}); otherwise error('csminwel1: Unknown method for gradient evaluation!') end @@ -244,18 +214,6 @@ while ~done [g3 badg3] = numgrad3(fcn, f3, x3, epsilon, varargin{:}); case 5 [g3,badg3] = numgrad5(fcn, f3, x3, epsilon, varargin{:}); - case 12 - [g3,badg3] = numgrad2_(fcn, f3, x3, epsilon, [], varargin{:}); - case 13 - [g3,badg3] = numgrad3_(fcn, f3, x3, epsilon, [], varargin{:}); - case 15 - [g3,badg3] = numgrad5_(fcn, f3, x3, epsilon, [], varargin{:}); - case 22 - [g3,badg3] = numgrad2_(fcn, f3, x3, epsilon, abs(diag(H)), varargin{:}); - case 23 - [g3,badg3] = numgrad3_(fcn, f3, x3, epsilon, abs(diag(H)), varargin{:}); - case 25 - [g3,badg3] = numgrad5_(fcn, f3, x3, epsilon, abs(diag(H)), varargin{:}); otherwise error('csminwel1: Unknown method for gradient evaluation!') end @@ -325,18 +283,6 @@ while ~done [gh,badgh] = numgrad3(fcn, fh, xh, epsilon, varargin{:}); case 5 [gh,badgh] = numgrad5(fcn, fh, xh, epsilon, varargin{:}); - case 12 - [gh,badgh] = numgrad2_(fcn, fh, xh, epsilon, [], varargin{:}); - case 13 - [gh,badgh] = numgrad3_(fcn, fh, xh, epsilon, [], varargin{:}); - case 15 - [gh,badgh] = numgrad5_(fcn, fh, xh, epsilon, [], varargin{:}); - case 22 - [gh,badgh] = numgrad2_(fcn, fh, xh, epsilon, abs(diag(H)), varargin{:}); - case 23 - [gh,badgh] = numgrad3_(fcn, fh, xh, epsilon, abs(diag(H)), varargin{:}); - case 25 - [gh,badgh] = numgrad5_(fcn, fh, xh, epsilon, abs(diag(H)), varargin{:}); otherwise error('csminwel1: Unknown method for gradient evaluation!') end diff --git a/matlab/numgrad2_.m b/matlab/numgrad2_.m deleted file mode 100644 index 3140a2ff7..000000000 --- a/matlab/numgrad2_.m +++ /dev/null @@ -1,60 +0,0 @@ -function [g, badg] = numgrad2_(fcn,f0,x,epsilon,scale,varargin) -% function [g badg] = numgrad2(fcn,xvarargin) - -% Original file downloaded from: -% http://sims.princeton.edu/yftp/optimize/mfiles/numgrad.m - -% Copyright (C) 1993-2007 Christopher Sims -% Copyright (C) 2012 Dynare Team -% -% This file is part of Dynare. -% -% Dynare is free software: you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation, either version 3 of the License, or -% (at your option) any later version. -% -% Dynare is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Dynare. If not, see . - -fh = NaN; - -delta = epsilon*max(abs(x)); -n = length(x); -g = zeros(n,1); - -badg=0; -goog=1; -g0 = 0; - -for i=1:n - xiold = x(i); - h = step_length_correction(xiold,scale,i)*delta; - x(i) = xiold + h; - [fh,junk1,junk2,cost_flag] = feval(fcn, x, varargin{:}); - if cost_flag - g0 = (fh - f0)/h; - else - x(i) = xiold - h; - [fh,junk1,junk2,cost_flag] = feval(fcn, x, varargin{:}); - if cost_flag - g0 = (f0-fh)/h; - else - goog = 0; - end - end - if goog && abs(g0)< 1e15 - g(i) = g0; - else - disp('bad gradient ------------------------') - % fprintf('Gradient w.r.t. %3d: %10g\n',i,g0) - g(i) = 0; - badg = 1; - end - x(i) = xiold; -end \ No newline at end of file diff --git a/matlab/numgrad3_.m b/matlab/numgrad3_.m deleted file mode 100644 index 67f126036..000000000 --- a/matlab/numgrad3_.m +++ /dev/null @@ -1,72 +0,0 @@ -function [g, badg, f0, f1, f2] = numgrad3_(fcn,f0,x,epsilon,scale,varargin) -% Computes the gradient of the objective function fcn using a three points -% formula if possible. -% -% Adapted from Sims' numgrad routine. -% -% See section 25.3.4 in Abramovitz and Stegun (1972, Tenth Printing, December) Handbook of Mathematical Functions. -% http://www.math.sfu.ca/~cbm/aands/ - -% Original file downloaded from: -% http://sims.princeton.edu/yftp/optimize/mfiles/numgrad.m - -% Copyright (C) 1993-2007 Christopher Sims -% Copyright (C) 2008-2012 Dynare Team -% -% This file is part of Dynare. -% -% Dynare is free software: you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation, either version 3 of the License, or -% (at your option) any later version. -% -% Dynare is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Dynare. If not, see . - -f1 = NaN; -f2 = NaN; - -delta = epsilon; -n = length(x); -g = zeros(n,1); - -badg=0; -goog=1; - -zgrad = 1; - -for i=1:n - xiold = x(i); - h = step_length_correction(xiold,scale,i)*delta; - x(i) = xiold + h; - [f1,junk1,junk2,cost_flag1] = feval(fcn, x, varargin{:}); - x(i) = xiold - h; - [f2,junk1,junk2,cost_flag2] = feval(fcn, x, varargin{:}); - if cost_flag1 && cost_flag2 - g0 = (f1 - f2) / (2*h); - if zgrad && f1>f0 && f2>f0 % Note that this condition is consistent with a minimization problem! - g0 = 0; - end - else - if cost_flag1 - g0 = (f1-f0)/h; - elseif cost_flag2 - g0 = (f0-f2)/h; - else - goog=0; - end - end - if goog && abs(g0)< 1e15 - g(i)=g0; - else - disp('bad gradient ------------------------') - g(i)=0; - badg=1; - end - x(i) = xiold; -end \ No newline at end of file diff --git a/matlab/numgrad5_.m b/matlab/numgrad5_.m deleted file mode 100644 index ac9e45655..000000000 --- a/matlab/numgrad5_.m +++ /dev/null @@ -1,91 +0,0 @@ -function [g, badg, f0, f1, f2, f3, f4] = numgrad5_(fcn,f0,x,epsilon,scale,varargin) -% Computes the gradient of the objective function fcn using a five points -% formula if possible. -% -% Adapted from Sims' numgrad.m routine. -% -% See section 25.3.6 Abramovitz and Stegun (1972, Tenth Printing, December) Handbook of Mathematical Functions. -% http://www.math.sfu.ca/~cbm/aands/ -% -% TODO Try Four points formula when cost_flag3=0 or cost_flag4=0. - -% Original file downloaded from: -% http://sims.princeton.edu/yftp/optimize/mfiles/numgrad.m - -% Copyright (C) 1993-2007 Christopher Sims -% Copyright (C) 2008-2012 Dynare Team -% -% This file is part of Dynare. -% -% Dynare is free software: you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation, either version 3 of the License, or -% (at your option) any later version. -% -% Dynare is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Dynare. If not, see . - -f1 = NaN; -f2 = NaN; -f3 = NaN; -f4 = NaN; - -delta = epsilon; -n=length(x); -tvec=delta*eye(n); -g=zeros(n,1); - -badg=0; -goog=1; - -zgrad = 1; - -for i=1:n - xiold = x(i); - h = step_length_correction(xiold,scale,i)*delta; - x(i) = xiold+h; - [f1,junk1,junk2,cost_flag1] = feval(fcn, x, varargin{:}); - x(i) = xiold-h; - [f2,junk1,junk2,cost_flag2] = feval(fcn, x, varargin{:}); - if ~cost_flag1 || ~cost_flag2 - cost_flag3 = 0; - cost_flag4 = 0; - disp('numgrad:: I cannot use the five points formula!!') - else - x(i) = xiold+2*h; - [f3,junk1,junk2,cost_flag3] = feval(fcn, x, varargin{:}); - x(i) = xiold-2*h; - [f4,junk1,junk2,cost_flag4] = feval(fcn, x, varargin{:}); - end - if cost_flag1 && cost_flag2 && cost_flag3 && cost_flag4% Five Points formula - g0 = (8*(f1 - f2)+ f4-f3) / (12*h); - if zgrad && f0