X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Foptim-1.2.0%2Fdfdp.m;fp=octave_packages%2Foptim-1.2.0%2Fdfdp.m;h=0614c791581342298d74b9a1f9a3c5c0e5645c86;hp=0000000000000000000000000000000000000000;hb=c880e8788dfc484bf23ce13fa2787f2c6bca4863;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/optim-1.2.0/dfdp.m b/octave_packages/optim-1.2.0/dfdp.m new file mode 100644 index 0000000..0614c79 --- /dev/null +++ b/octave_packages/optim-1.2.0/dfdp.m @@ -0,0 +1,70 @@ +%% Copyright (C) 1992-1994 Richard Shrager +%% Copyright (C) 1992-1994 Arthur Jutan +%% Copyright (C) 1992-1994 Ray Muzic +%% Copyright (C) 2010, 2011 Olaf Till +%% +%% This program 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. +%% +%% This program 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 +%% this program; if not, see . + +%% function prt = dfdp (x, f, p, dp, func[, bounds]) +%% numerical partial derivatives (Jacobian) df/dp for use with leasqr +%% --------INPUT VARIABLES--------- +%% x=vec or matrix of indep var(used as arg to func) x=[x0 x1 ....] +%% f=func(x,p) vector initialsed by user before each call to dfdp +%% p= vec of current parameter values +%% dp= fractional increment of p for numerical derivatives +%% dp(j)>0 central differences calculated +%% dp(j)<0 one sided differences calculated +%% dp(j)=0 sets corresponding partials to zero; i.e. holds p(j) fixed +%% func=function (string or handle) to calculate the Jacobian for, +%% e.g. to calc Jacobian for function expsum prt=dfdp(x,f,p,dp,'expsum') +%% bounds=two-column-matrix of lower and upper bounds for parameters +%% If no 'bounds' options is specified to leasqr, it will call +%% dfdp without the 'bounds' argument. +%%----------OUTPUT VARIABLES------- +%% prt= Jacobian Matrix prt(i,j)=df(i)/dp(j) +%%================================ +%% +%% dfxpdp is more general and is meant to be used instead of dfdp in +%% optimization. + +function prt = dfdp (x, f, p, dp, func, bounds) + + %% This is just an interface. The original code has been moved to + %% __dfdp__.m, which is used with two different interfaces by + %% leasqr.m. + + %% if (ischar (varargin{5})) + %% varargin{5} = @ (p) str2func (varargin{5}) (varargin{1}, p); + %% else + %% varargin{5} = @ (p) varargin{5} (varargin{1}, p); + %% end + + if (ischar (func)) + func = @ (p) str2func (func) (x, p); + else + func = @ (p) func (x, p); + end + + hook.f = f; + + if (nargin > 5) + hook.lbound = bounds(:, 1); + hook.ubound = bounds(:, 2); + end + + hook.diffp = abs (dp); + hook.fixed = dp == 0; + hook.diff_onesided = dp < 0; + + prt = __dfdp__ (p, func, hook);