Math::Symbolic::Custom::Equation ================================ This class implements methods for equating two Math::Symbolic expressions, and performing various operations on that equation. Example:- use strict; use Math::Symbolic 0.613 qw(:all); use Math::Symbolic::Custom::Equation 0.2; use Math::Symbolic::Custom::Polynomial 0.3; use Math::Symbolic::Custom::CollectSimplify 0.2; Math::Symbolic::Custom::CollectSimplify->register(); # Solve the simultaneous equations:- # x - 2*y = 7 # x^2 + 4*y^2 = 37 my $eq1 = Math::Symbolic::Custom::Equation->new('x - 2*y = 7'); my $eq2 = Math::Symbolic::Custom::Equation->new('x^2 + 4*y^2 = 37'); print "Solve the simultaneous equations:-\n\n"; print "\t[1]\t", $eq1->to_string(), "\n"; print "\t[2]\t", $eq2->to_string(), "\n\n"; # Make x the subject of eq. 1 my $eq1_x = $eq1->isolate('x'); die "Cannot isolate 'x' in " . $eq1->to_string() . "\n" unless defined $eq1_x; print "Make x the subject of [1]: ", $eq1_x->to_string(), "\n\n"; my $x_expr = $eq1_x->RHS(); # Substitute into eq. 2, re-arrange to make RHS = 0, and simplify my $eq3 = $eq2->implement('x' => $x_expr)->simplify(); print "Substitute into [2]: ", $eq3->to_string(), "\n\n"; # Re-arrange it to equal 0 my $eq3_2 = $eq3->to_zero()->simplify(); print "Rearrange to equal zero: ", $eq3_2->to_string(), "\n\n"; # we have an expression for y, solve it my ($var, $coeffs, $disc, $roots) = $eq3_2->LHS()->test_polynomial(); die "Cannot solve quadratic!\n" unless defined($var) && ($var eq 'y'); my $y_1 = $roots->[0]; my $y_2 = $roots->[1]; print "The solutions for y are: ($y_1, $y_2)\n\n"; # put these solutions into the expression for x in terms of y to get x values my $x_1 = $eq1_x->implement('y' => $y_1)->simplify()->RHS(); my $x_2 = $eq1_x->implement('y' => $y_2)->simplify()->RHS(); print "The solutions for x given y are: (x = $x_1 when y = $y_1) and (x = $x_2 when y = $y_2)\n\n"; # Check that these solutions hold for the original equations print "Check: "; if ( $eq1->holds({'x' => $x_1, 'y' => $y_1}) && $eq2->holds({'x' => $x_1, 'y' => $y_1}) ) { print "Solution (x = $x_1, y = $y_1) holds for [1] and [2]\n"; } print "Check: "; if ( $eq1->holds({'x' => $x_2, 'y' => $y_2}) && $eq2->holds({'x' => $x_2, 'y' => $y_2}) ) { print "Solution (x = $x_2, y = $y_2) holds for [1] and [2]\n"; } INSTALLATION To install this module, run the following commands: perl Makefile.PL make make test make install SUPPORT AND DOCUMENTATION After installing, you can find documentation for this module with the perldoc command. perldoc Math::Symbolic::Custom::Equation You can also look for information at: RT, CPAN's request tracker (report bugs here) https://rt.cpan.org/NoAuth/Bugs.html?Dist=Math-Symbolic-Custom-Equation CPAN Ratings https://cpanratings.perl.org/d/Math-Symbolic-Custom-Equation Search CPAN https://metacpan.org/release/Math-Symbolic-Custom-Equation LICENSE AND COPYRIGHT This software is copyright (c) 2025 by Matt Johnson. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.