Math::Amoeba(3pm) | User Contributed Perl Documentation | Math::Amoeba(3pm) |
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
LICENSE¶
PERL
HISTORY¶
See "REAME".
BUGS¶
Let me know.
AUTHOR¶
John A.R. Williams <J.A.R.Williams@aston.ac.uk>
Tom Chau <tom@cpan.org>
SEE ALSO¶
"Numerical Recipies: The Art of Scientific Computing" W.H. Press, B.P. Flannery, S.A. Teukolsky, W.T. Vetterling. Cambridge University Press. ISBN 0 521 30811 9.
COPYRIGHT¶
Copyright (c) 1995 John A.R. Williams. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
Since 2005, this module was co-developed with Tom.
2023-01-03 | perl v5.36.0 |