Renamed mtlb_fminsearch into fminsearch
[scilab.git] / scilab / modules / optimization / macros / neldermead / optimset.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2008-2009 - INRIA - Michael Baudin
3 //
4 // This file must be used under the terms of the CeCILL.
5 // This source file is licensed as described in the file COPYING, which
6 // you should have received as part of this distribution.  The terms
7 // are also available at
8 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
9
10 //
11 // optimset --
12 //   Emulate the optimset command of Matlab.
13 // Usage:
14 //   options = optimset ()
15 //   options = optimset ('TolX',1e-4)
16 //   options = optimset (options,'TolX',1e-4)
17 //
18 function options = optimset (varargin)
19   [lhs,rhs]=argn();
20   //mprintf("lhs\n");
21   //disp(lhs);
22   //mprintf("rhs\n");
23   //disp(rhs);
24   if rhs==1 then
25     //
26     // If there is only one argument, it is expected to be the
27     // name of a method.
28     //
29     method = varargin(1);
30     options = optimset_method ( method );
31   elseif modulo(rhs,2)<>0 then
32     //
33     // If the number of arguments is odd,
34     // the first argument is expected to be a optimset struct.
35     //
36     options = varargin(1);
37     t1 = typeof(options);
38     if t1<>"st" then
39       errmsg = sprintf("Odd number of arguments : the first argument is expected to be a struct, but is a %s",t1);
40       error(errmsg)
41     end
42     // ivar is a counter of the input arguments
43     ivar = 1;
44   else
45     options = optimset_new ();
46     // ivar is a counter of the input arguments
47     ivar = 0;
48   end
49   //
50   // Process key,values as pairs.
51   //
52   nbkeys = rhs/2;
53   for i=1:nbkeys
54     ivar = ivar + 1;
55     key = varargin(ivar);
56     ivar = ivar + 1;
57     value = varargin(ivar);
58     //mprintf("Argument #%d\n",ivar);
59     //mprintf("key = %s\n",key);
60     //mprintf("value = %s\n",string(value)); // One cannot display a function.
61     options = optimset_configure (options,key,value);
62   end
63 endfunction
64 //
65 // optimset_configure --
66 //   Configure the given key with the given value.
67 // Arguments
68 //   options : a optimset struct
69 //   key : a string, the key to configure
70 //   value : the value
71 //
72 function options = optimset_configure ( options , key , value )
73     select key
74     case "Display" then
75       options.Display = value;
76     case "FunValCheck" then
77       options.FunValCheck = value;
78     case "MaxFunEvals" then
79       options.MaxFunEvals = value;
80     case "MaxIter" then
81       options.MaxIter = value;
82     case "OutputFcn" then
83       options.OutputFcn = value;
84     case "PlotFcns" then
85       options.PlotFcns = value;
86     case "TolFun" then
87       options.TolFun = value;
88     case "TolX" then
89       options.TolX = value;
90     else
91       errmsg = sprintf("Unknown key %s",key)
92       error(errmsg)
93     end
94 endfunction
95 //
96 // optimset_new --
97 //   Returns an empty optimset struct
98 //
99 function options = optimset_new ()
100     options = struct(...
101       "Display" ,[],...
102       "FunValCheck" ,[],...
103       "MaxFunEvals" ,[],...
104       "MaxIter" ,[],...
105       "OutputFcn" ,[],...
106       "PlotFcns" ,[],...
107       "TolFun" ,[],...
108       "TolX" ,[]...
109       );
110 endfunction
111 //
112 // optimset_method --
113 //   Returns an optimset struct which content is the default 
114 //   settings for the given method.
115 // Arguments
116 //   method : a string, the name of the method
117 //
118 function options = optimset_method ( method )
119     options = optimset_new ();
120     select method
121     case "fminsearch" then
122       options = optimset_configure ( options , "Display" , "notify" );
123       options = optimset_configure ( options , "MaxFunEvals" , "200*numberofvariables" );
124       options = optimset_configure ( options , "MaxIter" , "200*numberofvariables" );
125       options = optimset_configure ( options , "TolFun" , 1.e-4 );
126       options = optimset_configure ( options , "TolX" , 1.e-4 );
127     else
128       errmsg = sprintf("Unknown method %s",method)
129       error(errmsg)
130     end
131 endfunction
132