The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Math::Symbolic - Symbolic calculations

SYNOPSIS

  use Math::Symbolic;

DESCRIPTION

Math::Symbolic is intended to offer symbolic calculation capabilities to the Perl programmer without using external (and commercial) libraries and/or applications.

Unless, however, some interested and knowledgable developers turn up to participate in the development, the library will be severely limited by my experience in the area. Symbolic calculations are an active field of research in CS.

EXPORT

None by default, but you may choose to have the following constants exported to your namespace using the standard Exporter semantics (including the :all tag).

  Constants representing operator types: (First letter indicates arity)
    B_SUM
    B_DIFFERENCE
    B_PRODUCT
    B_DIVISION
    U_MINUS
    U_P_DERIVATIVE
    U_T_DERIVATIVE
  
  Constants representing Math::Symbolic term types:
    T_OPERATOR
    T_CONSTANT
    T_VARIABLE

EXAMPLES

This example demonstrates variable and operator creation using object prototypes as well as partial derivatives and the various ways of applying derivatives and simplifying terms.

  use Math::Symbolic qw/:all/;
  
  my $var = Math::Symbolic::Variable->new();
  my $a = $var->new('a' => 2);
  my $b = $var->new('b' => 3);
  my $c = $var->new('c' => 4);
  
  print "Vars: a=" . $a->value() .
             " b=" . $b->value() .
             " c=" . $c->value() .
             " (Values are optional)\n\n";
  
  my $op    = Math::Symbolic::Operator->new();
  my $add1  = $op->new('+', $a, $c);
  my $mult1 = $op->new('*', $a, $b);
  my $div1  = $op->new('/', $add1, $mult1);
  
  print "Expression: (a+c)/(a*b)\n\n";
  
  print "prefix notation and evaluation:\n";
  print $div1->to_string('prefix') . " = " . $div1->value() . "\n\n";
  
  print "Now, we derive this partially to a: (prefix again)\n";
  
  my $n_tree = $op->new( {
    type => U_P_DERIVATIVE,
    operands => [$div1, $a],
  } );
  print $n_tree->to_string('prefix') . " = " . $n_tree->value() . "\n\n";
        
  print "Now, we apply the derivative to the term: (infix)\n";
  my $derived = $n_tree->apply_derivatives();
  print "$derived = " . $derived->value() . "\n\n";
  
  print "Finally, we simplify the derived term as much as possible:\n";
  my $simplified = $derived->simplify();
  print "$simplified = " . $derived->value() . "\n\n";

AUTHOR

Steffen Mueller, <symbolic-module at steffen-mueller dot net>

SEE ALSO

perl. Math::Symbolic::Base Math::Symbolic::Operator Math::Symbolic::Derivative Math::Symbolic::Constant Math::Symbolic::Variable