Math-Calculus-NewtonRaphson
view release on metacpan or search on metacpan
NewtonRaphson.pm view on Meta::CPAN
# Build up an expression for us to plug values into.
my $fiter = {
operation => '/',
operand1 => $self->{'expression'},
operand2 => $diffExp->getExpressionTree
};
# Now iterate.
my $curGuess = $guess;
my $lastGuess = !$guess;
my $iterations = 0;
while ($iterations < $MAXITERATIONS && $curGuess != $lastGuess) {
# Write traceback.
$self->{'traceback'} .= "$iterations\t$curGuess\n";
# Sub value in.
$lastGuess = $curGuess;
eval {
$curGuess = $lastGuess - $self->evaluateTree($fiter, $variable => $lastGuess, %mappings);
} || ($self->{'error'} ||= "Fatal error! $@");
# Increment iterations counter.
$iterations++;
}
# Return an appropriate value (or lack thereof...).
if ($self->{'error'}) {
return undef;
} else {
return $curGuess;
}
}
( run in 1.505 second using v1.01-cache-2.11-cpan-71847e10f99 )