Use new numgrad routines.

options_.gradient method = {12,22} two points formula.
options_.gradient method = {13,23} three points formula.
options_.gradient method = {15,25} four points formula.

Still need to decide what to do with (local) option zgrad.
time-shift
Stéphane Adjemian (Charybdis) 2012-09-21 17:05:09 +02:00
parent 4ce4242d0d
commit d0d0b6ed52
1 changed files with 73 additions and 9 deletions

View File

@ -78,6 +78,14 @@ 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
elseif ischar(grad)
[g,badg] = feval(grad,x0,varargin{:});
@ -130,6 +138,20 @@ 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
elseif ischar(grad),
[g1 badg1] = feval(grad,x1,varargin{:});
@ -167,6 +189,20 @@ 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
elseif ischar(grad),
[g2 badg2] = feval(grad,x2,varargin{:});
@ -205,6 +241,20 @@ 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
elseif ischar(grad),
[g3 badg3] = feval(grad,x3,varargin{:});
@ -272,6 +322,20 @@ 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
elseif ischar(grad),
[gh badgh] = feval(grad, xh,varargin{:});