NAME¶
Math::Calculus::Differentiate - Algebraic Differentiation Engine
SYNOPSIS¶
use Math::Calculus::Differentiate;
# Create an object.
my $exp = Math::Calculus::Differentiate->new;
# Set a variable and expression.
$exp->addVariable('x');
$exp->setExpression('x^2 + 5*x') or die $exp->getError;
# Differentiate and simplify.
$exp->differentiate or die $exp->getError;;
$exp->simplify or die $exp->getError;;
# Print the result.
print $exp->getExpression; # Prints 2*x + 5
DESCRIPTION¶
This module can take an algebraic expression, parse it into a tree structure,
modify the tree to give a representation of the differentiated function,
simplify the tree and turn the tree back into an output of the same form as
the input.
It supports differentiation of expressions including the +, -, *, / and ^ (raise
to power) operators, bracketed expressions to enable correct precedence and
the functions ln, exp, sin, cos, tan, sec, cosec, cot, sinh, cosh, tanh, sech,
cosech, coth, asin, acos, atan, asinh, acosh and atanh.
EXPORT¶
None by default.
METHODS¶
- new
-
$exp = Math::Calculus::Differentiate->new;
Creates a new instance of the differentiation engine, which can hold an
individual expression.
- addVariable
-
$exp->addVariable('x');
Sets a certain named value in the expression as being a variable. A named
value must be an alphabetic chracter.
- setExpression
-
$exp->setExpression('x^2 + 5*x);
Takes an expression in human-readable form and stores it internally as a
tree structure, checking it is a valid expression that the module can
understand in the process. Note that the engine is strict about syntax.
For example, note above that you must write 5*x and not just 5x.
Whitespace is allowed in the expression, but does not have any effect on
precedence. If you require control of precedence, use brackets; bracketed
expressions will always be evaluated first, as you would normally expect.
The module follows the BODMAS precedence convention. Returns undef on
failure and a true value on success.
- getExpression
-
$expr = $exp->getExpression;
Returns a textaul, human readable representation of the expression that is
being stored.
- differentiate
-
$exp->differentiate('x');
Differentiates the expression that was stored with setExpression with
respect to the variable passed as a parameter. Returns undef on failure
and a true value on success.
- simplify
-
$exp->simplify;
Attempts to simplify the expression that is stored internally. It is a very
good idea to call this after calling differentiate, as the tree will often
not be in the most compact possible form, and this will affect the
readability of output from getExpression and the performance of future
calls to differentiate if you are intending to obtain higher derivatives.
Returns undef on failure and a true value on success.
- getTraceback
-
$exp->getTraceback;
When setExpression and differentiate are called, a traceback is generated to
describe what these functions did. If an error occurs, this traceback can
be extremely useful in helping track down the source of the error.
- getError
-
$exp->getError;
When any method other than getTraceback is called, the error message stored
is cleared, and then any errors that occur during the execution of the
method are stored. If failure occurs, call this method to get a textual
representation of the error.
SEE ALSO¶
The author of this module has a website at
<
http://www.jwcs.net/~jonathan/>, which has the latest news about the
module and a web-based frontend to allow you to test the module out for
yourself.
AUTHOR¶
Jonathan Worthington, <jonathan@jwcs.net>
COPYRIGHT AND LICENSE¶
Copyright (C) 2004 by Jonathan Worthington
This library is free software; you can redistribute it and/or modify it under
the same terms as Perl itself, either Perl version 5.8.1 or, at your option,
any later version of Perl 5 you may have available.
POD ERRORS¶
Hey!
The above document had some coding errors, which are explained
below:
- Around line 55:
- '=item' outside of any '=over'
- Around line 150:
- You forgot a '=back' before '=head1'