---
name: "Math::Amoeba"
section: "3pm"
platform: "linux"
package: "libmath-amoeba-perl"
version: "0.05-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Math::Amoeba"
---

# 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.
