
Math::Macopt - A wrapper for macopt++,
which is a conjugate gradient library.

The package can be installed by the standard PERL module installation procedure:
perl Makefile.PL make make test make install
Please noted that the original "macopt++" C++ source code is included in this PERL package. The static linking avoids the possible conflict to any pre-installed version of "macopt++".

use strict;
use Math::Macopt;
&main();
sub main
{
# Some settings
my $N = 10;
my $epsilon = 0.001;
# Initialize the Macopt
my $macopt = new Math::Macopt::Base($N, 0);
# Setup the function and its gradient
my $func = sub {
my $x = shift;
my $size = $macopt->size();
my $sum = 0;
foreach my $i (0..$size-1) {
$sum += ($x->[$i]-$i)**2;
}
return $sum;
};
my $dfunc = sub {
my $x = shift;
my $size = $macopt->size();
my $g = ();
foreach my $i (0..$size-1) {
$g->[$i] = 2*($x->[$i]-$i);
}
return $g;
};
$macopt->setFunc(\&$func);
$macopt->setDfunc(\&$dfunc);
# Optimizer using macopt
my $x = [(1)x($N)];
$macopt->maccheckgrad($x, $N, $epsilon, 0) ;
$macopt->macoptII($x, $N);
# Display the result
printf "[%s]\n", join(',', @$x);
}

The Math::Macopt provides a PERL interface for the macopt++ conjugate gradient library, which is developed by David Mackay in C++. http://www.inference.phy.cam.ac.uk/mackay/c/macopt.html
The API is generated by SWIG (http://www.swig.org) to interact the native C codes of macopt++.
Math::Macopt +- Math::Macopt::Base
nil.
nil.
newSame as the original C++ source code.
Arguments:
Returns:
Please refer to the original macopt code for details.
sizeArguments:
Returns:
macoptIIOptimize (minimize) the vector based on the function and its gradient.
Arguments:
Returns:
Please notice that the optimal results will be put in the input vector "x" after called.
maccheckgradExamines objective function and d_objective function to see if they agree for a step of size epsilon.
Arguments:
Returns:
setFuncsetDfuncSet the function and its gradient function as PERL callbacks.
Arguments:
Returns:


No bug found yet.

nil.

Tom Chau <tom@cpan.org>

Cluster Technology Limited http://www.clustertech.com