Hi,
Sorry for the delay... At the moment, I'm not finished with the inverse
parabolic implementation. However, I can submit a little fix that
prevents the function to break if the upper bound of the search interval
is the same as the upper bound (attached file). This makes the function
behave just like its Matlab counterpart.
Cheers,
Florent
David Bateman wrote:
Florent Angly wrote:
Hi,
Could you please register me as an Octave-Forge developer?
I have some code that was written in Matlab, and I've been trying to
make it Octave compatible. Part of it uses the fminbnd function, however
the Octave-Forge function is not as fast as the Matlab one because it
does not use parabolic interpolation. I plan on integrating the
parabolic interpolation in the current fminbnd code and contribute it.
Florent,
We have no problems giving out write access to octave-forge, but prefer
to see a code sample on the list first. This is not really for code
review but rather to keep the number of inactive accounts on
octave-forge down.. Can you send your changes here first and Soren or I
will immediately give you write access.
Cheers
David
## Copyright (C) 2000 Ben Sapp. All rights reserved.
## Modification by Andreas Helms
## 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 2, or (at your option) any
## later version.
##
## This 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.
## -*- texinfo -*-
## @deftypefn {Function File} [EMAIL PROTECTED],@var{v}] =}
fminbnd(@var{f},@var{lb},@var{ub},@var{[options]},@var{P1},@var{P2}, ...)
##
## Find the minimizer @var{x} of a scalar function and the corresponding
## value @var{v} with the Golden Search method.
##
## @strong{Inputs}
## @table @var
## @item f
## A string contining the name of the function to minimiz
## @item lb
## Value to use as an initial lower bound on @var{x}.
## @item ub
## Value to use as an initial upper bound on @var{x}.
## @item options
## Vector with control parameters (For compatibily with MATLAB, not used
## here)
## @item P1,P2, ...
## Optional parameter for function @var{f}
##
## @end table
## @end deftypefn
## 2001-09-24 Andreas Helms <[EMAIL PROTECTED]>
## * modified for use with functions of more than one parameter
## 2007-08-09 Marco Caliari <[EMAIL PROTECTED]>
## * modified in order to get optionally the value of the function
## 2008-06-16 Florent Angly <[EMAIL PROTECTED]>
## * modified to accept initial lower bound equal to initial upper boundb(like
Matlab)
function [min,val] = fminbnd(_func,lb,ub, options, varargin)
delta = 1e-17;
gr = (sqrt(5)-1)/2;
width = (ub-lb);
#out = [ lb:(width/3):ub ] # breaks if lb == ub
out = linspace(lb, ub, 4); # doesn't break if lb == ub
out(2) = out(4)-gr*width;
out(3) = out(1)+gr*width;
upper = feval(_func,out(3), varargin{:});
lower = feval(_func,out(2), varargin{:});
while((out(3)-out(2)) > delta) #this will not work for symmetric funcs
if(upper > lower)
out(4) = out(3);
out(3) = out(2);
width = out(4)-out(1);
out(2) = out(4)-gr*width;
upper = lower;
lower = feval(_func,out(2), varargin{:});
else
out(1) = out(2);
out(2) = out(3);
width = out(4)-out(1);
out(3) = out(1)+width*gr;
lower = upper;
upper = feval(_func,out(3), varargin{:});
endif
endwhile
min = out(2);
val = feval(_func,out(2), varargin{:});
endfunction
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Octave-dev mailing list
Octave-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/octave-dev