PseudoRemainderSequence(R, polR)

prs.spad line 1 [edit on github]

This package contains some functions: discriminant, resultant, subResultantGcd, chainSubResultants, degreeSubResultant, lastSubResultant, resultantEuclidean, subResultantGcdEuclidean, \ ``semiSubResultantGcdEuclidean1`\ <l50736575646f52656d61696e64657253657175656e6365-5c20606073656d69537562526573756c74616e744763644575636c696465616e3160605c20>`, \ ``semiSubResultantGcdEuclidean2`\ <l50736575646f52656d61696e64657253657175656e6365-5c20606073656d69537562526573756c74616e744763644575636c696465616e3260605c20>`, etc. These procedures are coming from improvements of the subresultants algorithm.

chainSubResultants: (polR, polR) -> List polR

chainSubResultants(P, Q) computes the list of non zero subresultants of P and Q.

degreeSubResultant: (polR, polR, NonNegativeInteger) -> polR

degreeSubResultant(P, Q, d) computes a subresultant of degree d.

degreeSubResultantEuclidean: (polR, polR, NonNegativeInteger) -> Record(coef1: polR, coef2: polR, subResultant: polR)

degreeSubResultantEuclidean(P, Q, d) returns a subresultant S_i of degree d and carries out the equality coef1*P + coef2*Q = S_i.

discriminant: polR -> R

discriminant(P) returns the discriminant of P.

discriminantEuclidean: polR -> Record(coef1: polR, coef2: polR, discriminant: R)

discriminantEuclidean(P) carries out the equality coef1 * P + coef2 * D(P) = discriminant(P).

divide: (polR, polR) -> Record(quotient: polR, remainder: polR)

divide(F, G) computes quotient and rest of the exact euclidean division of F by G.

gcd: (polR, polR) -> polR if R has GcdDomain

gcd(P, Q) returns the gcd of P and Q.

indiceSubResultant: (polR, polR, NonNegativeInteger) -> polR

indiceSubResultant(P, Q, i) returns the subresultant of indice i

indiceSubResultantEuclidean: (polR, polR, NonNegativeInteger) -> Record(coef1: polR, coef2: polR, subResultant: polR)

indiceSubResultant(P, Q, i) returns the subresultant S_i(P, Q) and carries out the equality coef1*P + coef2*Q = S_i(P, Q)

lastSubResultant: (polR, polR) -> polR

lastSubResultant(P, Q) computes the last non zero subresultant of P and Q

lastSubResultantEuclidean: (polR, polR) -> Record(coef1: polR, coef2: polR, subResultant: polR)

lastSubResultantEuclidean(P, Q) computes the last non zero subresultant S and carries out the equality coef1*P + coef2*Q = S.

LazardQuotient2: (polR, R, R, NonNegativeInteger) -> polR

LazardQuotient2(F, x, y, n) computes (x^(n-1) * F) exquo y^(n-1)

LazardQuotient: (R, R, NonNegativeInteger) -> R

LazardQuotient(x, y, n) computes x^n exquo y^(n-1)

next_sousResultant2: (polR, polR, polR, R) -> polR

next_sousResultant2(P, Q, Z, s) returns the subresultant S_{e-1} where P ~ S_d, Q = S_{d-1}, Z = S_e, s = lc(S_d)

resultant: (polR, polR) -> R

resultant(P, Q) returns the resultant of P and Q

resultantEuclidean: (polR, polR) -> Record(coef1: polR, coef2: polR, resultant: R)

resultantEuclidean(P, Q) carries out the equality coef1*P + coef2*Q = resultant(P, Q)

resultantReduit: (polR, polR) -> R if R has GcdDomain

resultantReduit(P,Q) returns the “reduce resultant” of P and Q.

resultantReduitEuclidean: (polR, polR) -> Record(coef1: polR, coef2: polR, resultantReduit: R) if R has GcdDomain

resultantReduitEuclidean(P, Q) returns the “reduce resultant” and carries out the equality coef1*P + coef2*Q = resultantReduit(P, Q).

schema: (polR, polR) -> List NonNegativeInteger

schema(P, Q) returns the list of degrees of non zero subresultants of P and Q.

semiDegreeSubResultantEuclidean: (polR, polR, NonNegativeInteger) -> Record(coef2: polR, subResultant: polR)

semiDegreeSubResultantEuclidean(P, Q, d) returns a subresultant S_i of degree d and carries out the equality ... P + coef2*Q = S_i. Warning: degree(P) >= degree(Q).

semiDiscriminantEuclidean: polR -> Record(coef2: polR, discriminant: R)

discriminantEuclidean(P) carries out the equality ... P + coef2 * D(P) = discriminant(P). Warning: degree(P) >= degree(Q).

semiIndiceSubResultantEuclidean: (polR, polR, NonNegativeInteger) -> Record(coef2: polR, subResultant: polR)

semiIndiceSubResultantEuclidean(P, Q, i) returns the subresultant S_i(P, Q) and carries out the equality ... P + coef2*Q = S_i(P, Q) Warning: degree(P) >= degree(Q).

semiLastSubResultantEuclidean: (polR, polR) -> Record(coef2: polR, subResultant: polR)

semiLastSubResultantEuclidean(P, Q) computes the last non zero subresultant S and carries out the equality ... P + coef2*Q = S. Warning: degree(P) >= degree(Q).

semiResultantEuclidean1: (polR, polR) -> Record(coef1: polR, resultant: R)

semiResultantEuclidean1(P, Q) carries out the equality coef1.P + ... Q = resultant(P, Q).

semiResultantEuclidean2: (polR, polR) -> Record(coef2: polR, resultant: R)

semiResultantEuclidean2(P, Q) carries out the equality ... P + coef2*Q = resultant(P, Q). Warning: degree(P) >= degree(Q).

semiResultantReduitEuclidean: (polR, polR) -> Record(coef2: polR, resultantReduit: R) if R has GcdDomain

semiResultantReduitEuclidean(P, Q) returns the “reduce resultant” and carries out the equality ... P + coef2*Q = resultantReduit(P, Q).

semiSubResultantGcdEuclidean1: (polR, polR) -> Record(coef1: polR, gcd: polR)

semiSubResultantGcdEuclidean1(P, Q) carries out the equality coef1*P + ... Q = +/- S_i(P, Q) where the degree (not the indice) of the subresultant S_i(P, Q) is as small as possible.

semiSubResultantGcdEuclidean2: (polR, polR) -> Record(coef2: polR, gcd: polR)

semiSubResultantGcdEuclidean2(P, Q) carries out the equality ... P + coef2*Q = +/- S_i(P, Q) where the degree (not the indice) of the subresultant S_i(P, Q) is as small as possible. Warning: degree(P) >= degree(Q).

subResultantGcd: (polR, polR) -> polR

subResultantGcd(P, Q) returns the gcd of two primitive polynomials P and Q.

subResultantGcdEuclidean: (polR, polR) -> Record(coef1: polR, coef2: polR, gcd: polR)

subResultantGcdEuclidean(P, Q) carries out the equality coef1*P + coef2*Q = +/- S_i(P, Q) where the degree (not the indice) of the subresultant S_i(P, Q) is as small as possible.