# NAME

``    Math::Amoeba - Multidimensional Function Minimisation``

# SYNOPSIS

``````    use Math::Amoeba qw(ConstructVertices EvaluateVertices Amoeba MinimiseND);
my (\$vertice,\$y)=MinimiseND(\@guess,\@scales,\&func,\$tol,\$itmax,\$verbose);
my @vertices=ConstructVertices(\@vector,\@offsets);
my @y=EvaluateVertices(\@vertices,\&func);
my (\$vertice,\$y)=Amoeba(\@vertices,\@y,\&func,\$tol,\$itmax,\$verbose);``````

# DESCRIPTION

This is an implimenation of the Downhill Simpex Method in Multidimensions (Nelder and Mead) for finding the (local) minimum of a function. Doing this in Perl makes it easy for that function to actually be the output of another program such as a simulator.

Arrays and the function are passed by reference to the routines.

`MinimiseND`

The simplest use is the MinimiseND function. This takes a reference to an array of guess values for the parameters at the function minimum, a reference to an array of scales for these parameters (sensible ranges around the guess in which to look), a reference to the function, a convergence tolerence for the minimum, the maximum number of iterations to be taken and the verbose flag (default ON). It returns an array consisting of a reference to the function parameters at the minimum and the value there.

`Amoeba`

The Amoeba function is the actual implimentation of the Downhill Simpex Method in Multidimensions. It takes a reference to an array of references to arrays which are the initial n+1 vertices (where n is the number of function parameters), a reference to the function valuation at these vertices, a reference to the function, a convergence tolerence for the minimum, the maximum number of iterations to be taken and the verbose flag (default ON). It returns an array consisting of a reference to the function parameters at the minimum and the value there.

`ConstructVertices`

The ConstructVertices is used by MinimiseND to construct the initial vertices for Amoeba as the initial guess plus the parameter scale parameters as vectors along the parameter axis.

`EvaluateVertices`

The EvaluateVertices takes these set of vertices, calling the function for each one and returning the vector of results.

# EXAMPLE

``````    use Math::Amoeba qw(MinimiseND);
sub afunc {
my (\$a,\$b)=@_;
print "\$a\t\$b\n";
return (\$a-7)**2+(\$b+3)**2;
}
my @guess=(1,1);
my @scale=(1,1);
(\$p,\$y)=MinimiseND(\@guess,\@scale,\&afunc,1e-7,100);
print "(",join(',',@{\$p}),")=\$y\n";``````

produces the output

(6.99978191653352,-2.99981241563247)=1.00000008274829

PERL

See "REAME".

Let me know.

# AUTHOR

John A.R. Williams <J.A.R.Williams@aston.ac.uk>

Tom Chau <tom@cpan.org>