#!perl -w
#______________________________________________________________________
# Solve quadratic equation.
# Mike Schilli, m@perlmeister.com, 2004
#______________________________________________________________________
use Math::Algebra::Symbols;
use Test::Simple tests => 12;
{my ($t) = symbols(qw(t));
my $rabbit = 10 + 5 * $t;
my $fox = 7 * $t * $t;
my ($a, $b) = @{($rabbit - $fox)->solve("t")};
print "$a\n$b\n";
ok("$a" eq "1/14*sqrt(305)+5/14");
ok("$b" eq "-1/14*sqrt(305)+5/14");
}
#______________________________________________________________________
# Solve quadratic equation.
# PhilipRBrenan@yahoo.com, 2004
#______________________________________________________________________
$c = << 'END';
#______________________________________________________________________
# As per Mike, but with **2 and no final eval to show symbolic results.
# ($rabbit eq $fox)->solve("t")
#______________________________________________________________________
END
{my ($t) = symbols(qw(t));
my $rabbit = 10 + 5 * $t;
my $fox = 7 * $t ** 2;
my ($a, $b) = @{($rabbit eq $fox)->solve("t")};
print "\n$c\n$a\n$b\n";
ok("$a" eq "1/14*sqrt(305)+5/14");
ok("$b" eq "-1/14*sqrt(305)+5/14");
$c = << 'END';
#______________________________________________________________________
# With $a->solve($b) as a synonym for $a->solve("b")
# ($rabbit eq $fox)->solve($t)
#______________________________________________________________________
END
($a, $b) = @{($rabbit eq $fox)->solve("t")};
print "\n$c\n$a\n$b\n";
ok("$a" eq "1/14*sqrt(305)+5/14");
ok("$b" eq "-1/14*sqrt(305)+5/14");
$c = << 'END';
#______________________________________________________________________
# With $a > "b" as a synonym for $a->solve("b")
# $rabbit eq $fox > "t"
#______________________________________________________________________
END
($a, $b) = @{($rabbit eq $fox) > "t"};
print "\n$c\n$a\n$b\n";
ok("$a" eq "1/14*sqrt(305)+5/14");
ok("$b" eq "-1/14*sqrt(305)+5/14");
$c = << 'END';
#______________________________________________________________________
# With $a > $b as a synonym for $a->solve($t)
# $rabbit eq $fox > $t
# Requires version 1.17
#______________________________________________________________________
END
($a, $b) = @{($rabbit eq $fox) > $t};
print "\n$c\n$a\n$b\n";
ok("$a" eq "1/14*sqrt(305)+5/14");
ok("$b" eq "-1/14*sqrt(305)+5/14");
}
$c = << 'END';
#______________________________________________________________________
# In terms of variables:
# rabbit = rd + rv * t;
# fox = fa * t ** 2;
#
# (rabbit - fox)->solve(qw(t in terms of rd rv fa));
# The resulting equation can then be reused many times.
#______________________________________________________________________
END
{my ($t, $rd, $rv, $fa) = symbols(qw(t rd rv fa));
my $rabbit = $rd + $rv * $t;
my $fox = $fa * $t ** 2;
my ($a, $b) = @{($rabbit eq $fox) > [qw(t in terms of rd rv fa)]};
print "\n$c\n$a\n$b\n";
ok("$a" eq '1/2/$fa*sqrt(4*$fa*$rd+$rv**2)+1/2*$rv/$fa');
ok("$b" eq '-1/2/$fa*sqrt(4*$fa*$rd+$rv**2)+1/2*$rv/$fa');
}
syntax highlighted by Code2HTML, v. 0.9.1