X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Foptim-1.2.0%2Ftest_nelder_mead_min_2.m;fp=octave_packages%2Foptim-1.2.0%2Ftest_nelder_mead_min_2.m;h=b43bc52148cc40222808edc1384a0e436d06e2be;hp=0000000000000000000000000000000000000000;hb=c880e8788dfc484bf23ce13fa2787f2c6bca4863;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/optim-1.2.0/test_nelder_mead_min_2.m b/octave_packages/optim-1.2.0/test_nelder_mead_min_2.m new file mode 100644 index 0000000..b43bc52 --- /dev/null +++ b/octave_packages/optim-1.2.0/test_nelder_mead_min_2.m @@ -0,0 +1,153 @@ +## Copyright (C) 2002 Etienne Grossmann +## +## 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 . + +## Checks wether the function 'nelder_mead_min' accepts options properly + +ok = 1; +cnt = 1; + +if ! exist ("verbose"), verbose = 0; end +if ! exist ("inspect"), inspect = 0; end + +if verbose, + printf (["test_nelder_mead_2\n",\ + " Check whether nelder_mead_min accepts options properly\n\n"]); +end + +N = 2; +x1 = zeros (1,N); +small = 1e-3; +vol = (small^N) / factorial (N); + +## Define simple 2D function : [x,y] -> x^2, start from [0,0] +## + +function c = my_func (x) + c = x(1)^2; +end + +###################################################################### +## Test using volume ################################################# + +## Choose vtol and initial simplex so that algo should stop immediately. +ctl = struct ("verbose",verbose, "isz",small, "vtol",vol*1.01, "rst",0); + +[x2,v,nev] = nelder_mead_min ("my_func", x1, ctl); + +if nev != N+1 + if verbose || inspect, printf ("not ok %i\n",cnt); end + if inspect, keyboard; end + ok = 0 ; +else + if verbose, + printf ("ok %i\n",cnt); + end +end +cnt++; + +## Choose vtol and initial simplex so that algo should stop after one +## iteration (should be a reflexion and a tentative extension). Total is 5 +## evaluations. +ctl = struct ("verbose",verbose, "isz",small, "vtol",vol*0.99, "rst",0); + +x1 = [0,0]; + +[x2,v,nev] = nelder_mead_min ("my_func", x1, ctl); + +if nev != N+3 + if verbose || inspect, printf ("not ok %i\n",cnt); end + if inspect, keyboard; end + ok = 0 ; +else + if verbose, + printf ("ok %i\n",cnt); + end +end +cnt++; + +###################################################################### +## Test using radius ################################################# + +## Choose rtol and initial simplex so that algo stops immediately. +ctl = struct ("verbose",verbose, "isz",small, "rtol",small*2.01, "rst",0); + +[x2,v,nev] = nelder_mead_min ("my_func", x1, ctl); + +if nev != N+1 + if verbose || inspect, printf ("not ok %i\n",cnt); end + if inspect, keyboard; end + ok = 0 ; +else + if verbose, + printf ("ok %i\n",cnt); + end +end +cnt++; + +## Choose rtol and initial simplex so that algo does not stop immediately. +ctl = struct ("verbose",verbose, "isz",small, "rtol",small*1.99, "rst",0); + +[x2,v,nev] = nelder_mead_min ("my_func", x1, ctl); + +if nev <= N+1 + if verbose || inspect, printf ("not ok %i\n",cnt); end + if inspect, keyboard; end + ok = 0 ; +else + if verbose, + printf ("ok %i\n",cnt); + end +end +cnt++; + +###################################################################### +## Test using values ################################################# + +## Choose rtol and initial simplex so that algo should stop immediately. +ctl = struct ("verbose",verbose, "isz",small, "ftol",1.01*small^2, "rst",0); + +[x2,v,nev] = nelder_mead_min ("my_func", x1, ctl); + +if nev != N+1 + if verbose || inspect, printf ("not ok %i\n",cnt); end + if inspect, keyboard; end + ok = 0 ; +else + if verbose, + printf ("ok %i\n",cnt); + end +end +cnt++; + +## Choose rtol and initial simplex so that algo does not stop immediately. +ctl = struct ("verbose",verbose, "isz",small, "ftol",0.99*small^2, "rst",0); + +[x2,v,nev] = nelder_mead_min ("my_func", x1, ctl); + +if nev <= N+1 + if verbose || inspect, printf ("not ok %i\n",cnt); end + if inspect, keyboard; end + ok = 0 ; +else + if verbose + printf ("ok %i\n",cnt); + end +end +cnt++; + +cnt--; +if verbose && ok + printf ("All %i tests ok\n", cnt); +end