5.7.6 GCD, LCM and resultant
The functions for polynomial greatest common divisor and least common
multiple have the synopsis
| | ex gcd(const ex & a, const ex & b);
ex lcm(const ex & a, const ex & b);
|
The functions gcd() and lcm() accept two expressions
a and b as arguments and return a new expression, their
greatest common divisor or least common multiple, respectively. If the
polynomials a and b are coprime gcd(a,b) returns 1
and lcm(a,b) returns the product of a and b. Note that all
the coefficients must be rationals.
| | #include <ginac/ginac.h>
using namespace GiNaC;
int main()
{
symbol x("x"), y("y"), z("z");
ex P_a = 4*x*y + x*z + 20*pow(y, 2) + 21*y*z + 4*pow(z, 2);
ex P_b = x*y + 3*x*z + 5*pow(y, 2) + 19*y*z + 12*pow(z, 2);
ex P_gcd = gcd(P_a, P_b);
// x + 5*y + 4*z
ex P_lcm = lcm(P_a, P_b);
// 4*x*y^2 + 13*y*x*z + 20*y^3 + 81*y^2*z + 67*y*z^2 + 3*x*z^2 + 12*z^3
}
|
The resultant of two expressions only makes sense with polynomials.
It is always computed with respect to a specific symbol within the
expressions. The function has the interface
| | ex resultant(const ex & a, const ex & b, const ex & s);
|
Resultants are symmetric in a and b. The following example
computes the resultant of two expressions with respect to x and
y, respectively:
| | #include <ginac/ginac.h>
using namespace GiNaC;
int main()
{
symbol x("x"), y("y");
ex e1 = x+pow(y,2), e2 = 2*pow(x,3)-1; // x+y^2, 2*x^3-1
ex r;
r = resultant(e1, e2, x);
// -> 1+2*y^6
r = resultant(e1, e2, y);
// -> 1-4*x^3+4*x^6
}
|