Operations on polynomials¶
This chapter contains commands to manipulate polynomials. This includes functions for constructing and evaluating orthogonal polynomials.

Expand
(expr)¶ 
Expand
(expr, var) 
Expand
(expr, varlist) transform a polynomial to an expanded form
 Param expr
a polynomial expression
 Param var
a variable
 Param varlist
a list of variables
This command brings a polynomial in expanded form, in which polynomials are represented in the form \(c_0 + c_1x + c_2x^2 + ... + c_nx^n\). In this form, it is easier to test whether a polynomial is zero, namely by testing whether all coefficients are zero. If the polynomial {expr} contains only one variable, the first calling sequence can be used. Otherwise, the second form should be used which explicitly mentions that {expr} should be considered as a polynomial in the variable {var}. The third calling form can be used for multivariate polynomials. Firstly, the polynomial {expr} is expanded with respect to the first variable in {varlist}. Then the coefficients are all expanded with respect to the second variable, and so on.
 Example
In> Expand((1+x)^5) Out> x^5+5*x^4+10*x^3+10*x^2+5*x+1 In> Expand((1+xy)^2, x); Out> x^2+2*(1y)*x+(1y)^2 In> Expand((1+xy)^2, {x,y}) Out> x^2+((2)*y+2)*x+y^22*y+1
See also

Degree
(expr[, var])¶ degree of a polynomial
 Param expr
a polynomial
 Param var
a variable occurring in {expr}
This command returns the degree of the polynomial
expr
with respect to the variablevar
. If only one variable occurs inexpr
, the first calling sequence can be used. Otherwise the user should use the second form in which the variable is explicitly mentioned. Example
In> Degree(x^5+x1); Out> 5; In> Degree(a+b*x^3, a); Out> 1; In> Degree(a+b*x^3, x); Out> 3;

Coef
(expr, var, order)¶ coefficient of a polynomial
 Param expr
a polynomial
 Param var
a variable occurring in {expr}
 Param order
integer or list of integers
This command returns the coefficient of {var} to the power {order} in the polynomial {expr}. The parameter {order} can also be a list of integers, in which case this function returns a list of coefficients.
 Example
In> e := Expand((a+x)^4,x) Out> x^4+4*a*x^3+(a^2+(2*a)^2+a^2)*x^2+ (a^2*2*a+2*a^3)*x+a^4; In> Coef(e,a,2) Out> 6*x^2; In> Coef(e,a,0 .. 4) Out> {x^4,4*x^3,6*x^2,4*x,1};
See also

Content
(expr)¶ content of a univariate polynomial
 Param expr
univariate polynomial
This command determines the content of a univariate polynomial.
 Example
In> poly := 2*x^2 + 4*x; Out> 2*x^2+4*x; In> c := Content(poly); Out> 2*x; In> pp := PrimitivePart(poly); Out> x+2; In> Expand(pp*c); Out> 2*x^2+4*x;
See also

PrimitivePart
(expr)¶ primitive part of a univariate polynomial
 Param expr
univariate polynomial
This command determines the primitive part of a univariate polynomial. The primitive part is what remains after the content is divided out. So the product of the content and the primitive part equals the original polynomial.
 Example
In> poly := 2*x^2 + 4*x; Out> 2*x^2+4*x; In> c := Content(poly); Out> 2*x; In> pp := PrimitivePart(poly); Out> x+2; In> Expand(pp*c); Out> 2*x^2+4*x;
See also

LeadingCoef
(poly)¶ 
LeadingCoef
(poly, var) leading coefficient of a polynomial
This function returns the leading coefficient of
poly
, regarded as a polynomial in the variablevar
. The leading coefficient is the coefficient of the term of highest degree. If only one variable appears in the expressionpoly
, it is obvious that it should be regarded as a polynomial in this variable and the first calling sequence may be used. Example
In> poly := 2*x^2 + 4*x; Out> 2*x^2+4*x; In> lc := LeadingCoef(poly); Out> 2; In> m := Monic(poly); Out> x^2+2*x; In> Expand(lc*m); Out> 2*x^2+4*x; In> LeadingCoef(2*a^2 + 3*a*b^2 + 5, a); Out> 2; In> LeadingCoef(2*a^2 + 3*a*b^2 + 5, b); Out> 3*a;

Monic
(poly)¶ 
Monic
(poly, var) monic part of a polynomial
This function returns the monic part of
poly
, regarded as a polynomial in the variablevar
. The monic part of a polynomial is the quotient of this polynomial by its leading coefficient. So the leading coefficient of the monic part is always one. If only one variable appears in the expressionpoly
, it is obvious that it should be regarded as a polynomial in this variable and the first calling sequence may be used. Example
In> poly := 2*x^2 + 4*x; Out> 2*x^2+4*x; In> lc := LeadingCoef(poly); Out> 2; In> m := Monic(poly); Out> x^2+2*x; In> Expand(lc*m); Out> 2*x^2+4*x; In> Monic(2*a^2 + 3*a*b^2 + 5, a); Out> a^2+(a*3*b^2)/2+5/2; In> Monic(2*a^2 + 3*a*b^2 + 5, b); Out> b^2+(2*a^2+5)/(3*a);
See also

SquareFree
(p)¶ return the squarefree part of polynomial
 Param p
a polynomial in {x}
Given a polynomial \(p = p_1^{n_1}\ldots p_m^{n_m}\) with irreducible polynomials \(p_i\), return the squarefree version part (with all the factors having multiplicity 1): \(p_1\ldots p_m\)
 Example
In> Expand((x+1)^5) Out> x^5+5*x^4+10*x^3+10*x^2+5*x+1; In> SquareFree(%) Out> (x+1)/5; In> Monic(%) Out> x+1;
See also
FindRealRoots()
,NumRealRoots()
,MinimumBound()
,MaximumBound()
,Factor()

SquareFreeFactorize
(p, x)¶ return squarefree decomposition of polynomial
 Param p
a polynomial in {x}
Given a polynomial \(p\) having squarefree decomposition \(p = p_1^{n_1}\ldots p_m^{n_m}\) where \(p_i\) are squarefree and \(n_{i+1}>n_i\), return the list of pairs (\(p_i\), \(n_i\))
 Example
In> Expand((x+1)^5) Out> x^5+5*x^4+10*x^3+10*x^2+5*x+1 In> SquareFreeFactorize(%,x) Out> {{x+1,5}}
See also

Horner
(expr, var)¶ convert a polynomial into the Horner form
This command turns the polynomial
expr
, considered as a univariate polynomial invar
, into the Horner form. A polynomial in normal form is an expression such as \(c_0 + c_1x + \ldots + c_nx^n\). If one converts this polynomial into Horner form, one gets the equivalent expression \((\ldots( c_nx + c_{n1}) x + \ldots + c_1)x + c_0\). Both expression are equal, but the latter form gives a more efficient way to evaluate the polynomial as the powers have disappeared. Example
In> expr1:=Expand((1+x)^4) Out> x^4+4*x^3+6*x^2+4*x+1; In> Horner(expr1,x) Out> (((x+4)*x+6)*x+4)*x+1;
See also

ExpandBrackets
(expr)¶ expand all brackets
This command tries to expand all the brackets by repeatedly using the distributive laws \(a(b+c) = ab + ac\) and \((a+b)c = ac + bc\). It goes further than
Expand()
, in that it expands all brackets. Example
In> Expand((ax)*(bx),x) Out> x^2(b+a)*x+a*b; In> Expand((ax)*(bx),{x,a,b}) Out> x^2(b+a)*x+b*a; In> ExpandBrackets((ax)*(bx)) Out> a*bx*b+x^2a*x;
See also

EvaluateHornerScheme
(coeffs, x)¶ fast evaluation of polynomials
This function evaluates a polynomial given as a list of its coefficients, using the Horner scheme. The list of coefficients starts with the \(0\)th power.

OrthoP
(n, x)¶ 
OrthoP
(n, a, b, x) Legendre and Jacobi orthogonal polynomials
The first calling format with two arguments evaluates the Legendre polynomial of degree
n
at the pointx
. The second form does the same for the Jacobi polynomial with parametersa
andb
, which should be both greater than \(1\).The Jacobi polynomials are orthogonal with respect to the weight function \((1x)^a(1+x)^b\) on the interval \([1,1]\). They satisfy the recurrence relation \(P(n,a,b,x) = \frac{2n+a+b1}{2n+a+b2}\frac{a^2b^2+x(2n+a+b2)(n+a+b)}{2n(n+a+b)}P(n1,a,b,x)  \frac{(n+a1)(n+b1)(2n+a+b)}{n(n+a+b)(2n+a+b2)}P(n2,a,b,x)\) for \(n > 1\), with \(P(0,a,b,x) = 1\), \(P(1,a,b,x) = \frac{ab}{2}+x(1+\frac{a+b}{2})\).

OrthoH
(n, x)¶ Hermite orthogonal polynomials
This function evaluates the Hermite polynomial of degree
n
at the pointx
.The Hermite polynomials are orthogonal with respect to the weight function \(\exp(\frac{x^2}{2})\) on the entire real axis. They satisfy the recurrence relation \(H(n,x) = 2xH(n1,x)  2(n1)H(n2,x)\) for \(n > 1\), with \(H(0,x) = 1\), \(H(1,x) = 2x\).
 Example
In> OrthoH(3, x); Out> x*(8*x^212); In> OrthoH(6, 0.5); Out> 31;
See also

OrthoG
(n, a, x)¶ Gegenbauer orthogonal polynomials
This function evaluates the Gegenbauer (or ultraspherical) polynomial with parameter
a
and degreen
at the pointx
. The parametera
should be greater than \(\frac{1}{2}\).The Gegenbauer polynomials are orthogonal with respect to the weight function \((1x^2)^{a\frac{1}{2}}\) on the interval \([1,1]\). Hence they are connected to the Jacobi polynomials via \(G(n, a, x) = P(n, a\frac{1}{2}, a\frac{1}{2}, x)\). They satisfy the recurrence relation \(G(n,a,x) = 2(1+\frac{a1}{n})xG(n1,a,x)(1+2\frac{a2}{n})G(n2,a,x)\) for \(n>1\), with \(G(0,a,x) = 1\), \(G(1,a,x) = 2x\).

OrthoL
(n, a, x)¶ Laguerre orthogonal polynomials
This function evaluates the Laguerre polynomial with parameter
a
and degreen
at the pointx
. The parametera
should be greater than \(1\).The Laguerre polynomials are orthogonal with respect to the weight function \(x^a\exp(x)\) on the positive real axis. They satisfy the recurrence relation \(L(n,a,x) = (2+\frac{a1x}{n})L(n1,a,x) (1\frac{a1}{n})L(n2,a,x)\) for \(n>1\), with \(L(0,a,x) = 1\), \(L(1,a,x) = a + 1  x\).

OrthoT
(n, x)¶ 
OrthoU
(n, x)¶ Chebyshev polynomials
These functions evaluate the Chebyshev polynomials of the first kind \(T(n,x)\) and of the second kind \(U(n,x)\), of degree
n
at the pointx
. (The name of this Russian mathematician is also sometimes spelled Tschebyscheff.)The Chebyshev polynomials are orthogonal with respect to the weight function \((1x^2)^{\frac{1}{2}}\). Hence they are a special case of the Gegenbauer polynomials \(G(n,a,x)\), with \(a=0\). They satisfy the recurrence relations \(T(n,x) = 2xT(n1,x)  T(n2,x)\), \(U(n,x) = 2xU(n1,x)  U(n2,x)\) for \(n > 1\), with \(T(0,x) = 1\), \(T(1,x) = x\), \(U(0,x) = 1\), \(U(1,x) = 2x\).
 Example
In> OrthoT(3, x); Out> 2*x*(2*x^21)x; In> OrthoT(10, 0.9); Out> 0.2007474688; In> OrthoU(3, x); Out> 4*x*(2*x^21); In> OrthoU(10, 0.9); Out> 2.2234571776;
See also

OrthoPSum
(c, x)¶ 
OrthoPSum
(c, a, b, x) 
OrthoGSum
(c, a, x)¶ 
OrthoHSum
(c, x)¶ 
OrthoLSum
(c, a, x)¶ 
OrthoTSum
(c, x)¶ 
OrthoUSum
(c, x)¶ sums of series of orthogonal polynomials
These functions evaluate the sum of series of orthogonal polynomials at the point
x
, with given list of coefficientsc
of the series and fixed polynomial parametersa
,b
(if applicable). The list of coefficients starts with the lowest order, so that for exampleOrthoLSum(c, a, x) = c[1] L[0](a,x) + c[2] L[1](a,x) + ... + c[N] L[N1](a,x)
.See pages for specific orthogonal polynomials for more details on the parameters of the polynomials. Most of the work is performed by the internal function
OrthoPolySum()
. The individual polynomials entering the series are not computed, only the sum of the series. Example
In> Expand(OrthoPSum({1,0,0,1/7,1/8}, 3/2, 2/3, x)); Out> (7068985*x^4)/3981312+(1648577*x^3)/995328+ (3502049*x^2)/4644864+(4372969*x)/6967296 +28292143/27869184

OrthoPoly
(name, n, params, x)¶ internal function for constructing orthogonal polynomials
This function is used internally to construct orthogonal polynomials. It returns the
n
th polynomial from the familyname
with parametersparams
at the pointx
. All known families are stored in the association list returned by the functionKnownOrthoPoly()
. Thename
serves as key.At the moment the following names are known to yacas:
"Jacobi"
,"Gegenbauer"
,"Laguerre"
,"Hermite"
,"Tscheb1"
, and"Tscheb2"
. The value associated to the key is a pure function that takes two arguments: the ordern
and the extra parametersp
, and returns a list of two lists: the first list contains the coefficients{A,B}
of then=1
polynomial, i.e. \(A+Bx\); the second list contains the coefficients{A,B,C}
in the recurrence relation, i.e. \(P_n = (A+Bx)P_{n1}+CP_{n2}\).Note
There are only 3 coefficients in the second list, because none of the considered polynomials use \(C+Dx\) instead of \(C\) in the recurrence relation. This is assumed in the implementation.
If the argument
x
is numerical, the functionOrthoPolyNumeric()
is called. Otherwise, the functionOrthoPolyCoeffs()
computes a list of coefficients, andEvaluateHornerScheme()
converts this list into a polynomial expression.

OrthoPolySum
(name, c, params, x)¶ internal function for computing series of orthogonal polynomials
This function is used internally to compute series of orthogonal polynomials. It is similar to the function
OrthoPoly()
and returns the result of the summation of series of polynomials from the familyname
with parametersparams
at the pointx
, wherec
is the list of coefficients of the series. The algorithm used to compute the series without first computing the individual polynomials is the ClenshawSmith recurrence scheme. (See the algorithms book for explanations.)If the argument
x
is numerical, the functionOrthoPolySumNumeric()
is called. Otherwise, the functionOrthoPolySumCoeffs()
computes the list of coefficients of the resulting polynomial, andEvaluateHornerScheme()
converts this list into a polynomial expression.See also
OrthoPSum()
,OrthoGSum()
,OrthoHSum()
,OrthoLSum()
,OrthoTSum()
,OrthoUSum()
,OrthoPoly()