|
D.15.15.2 checkpfd
Procedure from library pfd.lib (see pfd_lib).
- Usage:
- checkpfd(list(f,g),dec[,N,C]); f,g poly, dec list, N,C int
- Return:
- 0 or 1
- Purpose:
- test for (mathematical) equality of f/g and a partial fraction
decomposition dec. The list dec has to have the same structure as the
output of pfd.
The denominator g can also be given in factorized form as a list of
an ideal of irreducible non constant polynomials and an intvec of
exponents. This can save time since the first step in the algorithm is
to factorize g. (a list of the zero-ideal and an empty intvec
represents a denominator of 1.)
By default the test is done (exactly) by bringing all terms of the
decomposition on the same denominator and comparing to f/g.
If additional parameters N [, C] are given and if N>0 , a
probabilistic method is chosen: evaluation at N random points with
coordinates between -C and C. This may be faster for big polynomials.
Example:
| LIB "pfd.lib";
ring R = 0,(x,y),dp;
poly f = x^3+3*x^2*y+2*y^2-x^2+4*x*y;
poly g = x^2*y*(x-1)*(x-y)^2;
// partial fraction decomposition of f/g:
list dec = pfd(f,g);
==> (2) / (q3*q4)
==> + (-2) / (q1*q4)
==> + (-6) / (q3*q4^2)
==> + (1) / (q2*q4^2)
==> + (9) / (q1*q4^2)
==> + (2) / (q3^2*q4)
==> where
==> q1 = x-1
==> q2 = y
==> q3 = x
==> q4 = x-y
==> (6 terms)
==>
// some other decomposition (not equal to f/g):
list wrong_dec = pfd(f+1,g);
==> (1) / (q3*q4)
==> + (-1) / (q1*q4)
==> + (-1) / (q2*q3)
==> + (1) / (q1*q2)
==> + (-7) / (q3*q4^2)
==> + (1) / (q2*q4^2)
==> + (10) / (q1*q4^2)
==> + (1) / (q3^2*q4)
==> + (-1) / (q2*q3^2)
==> + (1) / (q3*q4^3)
==> + (-1) / (q2*q4^3)
==> + (1) / (q3*q4^4)
==> + (-1) / (q2*q4^4)
==> + (1) / (q3^2*q4^3)
==> where
==> q1 = x-1
==> q2 = y
==> q3 = x
==> q4 = x-y
==> (14 terms)
==>
displaypfd_long(dec);
==> (2)/((x)*(x-y))
==> + (-2)/((x-1)*(x-y))
==> + (-6)/((x)*(x-y)^2)
==> + (1)/((y)*(x-y)^2)
==> + (9)/((x-1)*(x-y)^2)
==> + (2)/((x)^2*(x-y))
==> (6 terms)
==>
list fraction = f,g;
// exact test:
checkpfd(fraction,dec);
==> 1
checkpfd(fraction,wrong_dec);
==> 0
// probabilistic test (evaluation at 10 random points):
checkpfd(fraction,dec,10);
==> 1
checkpfd(fraction,wrong_dec,10);
==> 0
| See also:
pfd.
|