NAME
PDL::Fit::Levmar::Func - Create model functions for Levenberg-Marquardt fit routines
DESCRIPTION
This module creates and manages functions for use with the Levmar fitting module. The functions are created with a very simple description language (that is mostly C), or are pure C, or are perl code. For many applications, the present document is not necessary because levmar uses the Levmar::Func module transparantly. Therefore, before reading the following, refer to PDL::Fit::Levmar.
SYNOPSIS
use PDL::Fit::Levmar::Func;
$func = levmar_func( FUNC => # define and link function
'
function gaussian
loop
x[i] = p[0] * exp(-(t[i] - p[1])*(t[i] - p[1])*p[2]);
end function
jacobian jacgaussian
double arg, expf;
loop
arg = t[i] - p[1];
expf = exp(-arg*arg*p[2]);
d0 = expf;
d1 = p[0]*2*arg*p[2]*expf;
d2 = p[0]*(-arg*arg)*expf;
end jacobian
'
);
$hout = PDL::Fit::Levmar::levmar($p,$x,$t, # fit the data
FUNCTION => $func,
);
FUNCTIONS
levmar_func()
levmar_func( OPTIONS )
This function creates and links a function, ie, takes a function definition and returns a function (object instance) ready for use by levmar. see PDL::Fit::Levmar::Func for more information.
OPTIONS:
Some of the options are described in the PDL::Fit::Levmar documentation.
MKOBJ -- command to compile source into object code. This can be set.
The default value is determined by the perl installation and can
be determined by examining the Levmar::Func object returned by
new or the output hash of a call to levmar. A typical value is
cc -c -O2 -fPIC -o %o %c
MKSO -- command to convert object code to dynamic library code. A typical
default value is
cc -shared -L/usr/local/lib -fstack-protector %o -o %s
CTOP -- The value of this string will be written at the top of the c code
written by Levmar::Func. This can be used to include headers and so forth.
This option is actually set in the Levmar::Func object.
call()
Call (evaluate) the fit function in a Levmar::Func object.
use PDL::Fit::Levmar::Func;
$Gh = levmar_func(FUNC=>$fcode);
$x = $Gh->call($p,$t);
Here $fcode is a function definition (say lpp code). (This does
not currently work with perl subroutines, I think. Of course,
you can call the subroutine directly. But it would be good
to support it for consistency.)
$p is a pdl or ref to array of parameters.
$t is a pdl of co-ordinate values.
$x is the fit function evaluated at $p and $t. $x has the
same shape as $t.
$Gf = levmar_func( FUNC => '
function
x = p0 * t * t;
');
print $Gf->call([2],sequence(10)) , "\n";
[0 2 8 18 32 50 72 98 128 162]
new
my $fitfunc = new PDL::Fit::Levmar::Func(...);
or
my $fitfunc = levmar_func(...);
Generic constructor. Use levmar_func rather than new.
AUTHORS
Copyright (C) 2006 John Lapeyre. All rights reserved. There is no warranty. You are allowed to redistribute this software / documentation under certain conditions. For details, see the file COPYING in the PDL distribution. If this file is separated from the PDL distribution, the copyright notice should be included in the file.