#!/usr/bin/perl # Copyright (c) 2009-2017 Martin Becker. All rights reserved. # This package is free software; you can redistribute it and/or modify it # under the same terms as Perl itself. # Math::Polynomial usage example: Migration from version 0.04 to 1.002 # # Math::Polynomial version 1.000 broke backwards compatibility with # earlier versions. This example demonstrates how legacy code using # Math::Polynomial version 0.04 can be adapted to use a more current # version of Math::Polynomial. # # Throughout the rest of this example, old code is in comments, # immediately followed by changed code. Parts needing no modification # are in blocks without any comments. use strict; use warnings; # use Math::Polynomial; use Math::Polynomial 1.002; # my $p = Math::Polynomial->new(1, 3, -2); my $p = Math::Polynomial->new(-2, 3, 1); # Math::Polynomial->verbose(0); Math::Polynomial->string_config({ with_variable => 0, plus => q{ }, }); print "p is $p\n"; # my $result = $p->eval(5); my $result = $p->evaluate(5); print "p(5) is $result\n"; # my $q = Math::Polynomial->new(2, 3); my $q = Math::Polynomial->new(3, 2); # my $r = $q->clone; my $r = $q; $r += 1; print "q is $q, r is $r\n"; # my $s = $q - $r; # $s->tidy; my $s = $q - $r; print "s is $s\n"; # my $qq = $q->clone; # $qq->mul1c(2); my $qq = $q->mul_root(2); print "qq is $qq\n"; # $qq->div1c(2); $qq = $qq->div_root(2); print "qq is now $qq\n"; # Math::Polynomial->verbose(1); Math::Polynomial->string_config({ fold_sign => 1, leading_minus => q{-}, times => q{*}, variable => q{$X}, power => q{**}, prefix => q{}, suffix => q{}, }); # my ($quot, $rem) = Math::Polynomial::quotrem($p, $q); my ($quot, $rem) = $p->divmod($q); print "($p) / ($q) = $quot\n"; print "($p) % ($q) = $rem\n"; # print "q^2 % p = ", $q * $q % $p, "\n"; print "q^2 % p = ", $q**2 % $p, "\n"; # my $pp = Math::Polynomial::interpolate(1 => 9, 2 => 14, 3 => 11); my $pp = Math::Polynomial->interpolate([1, 2, 3], [9, 14, 11]); print "pp = $pp\n"; __END__