In this document, we explain how to calculate polynomials and to solve polynomial equations.

Polynomial is an expression consisting of the addition, subtraction, multiplication of coefficients and non-negative exponents of variables. For example, the following expression is a 4-order polynomial of variable 'x'. Here, a_{4} ~ a_{0} are the coefficients of the polynomial.

a_{4}x^{4}+ a_{3}x^{3}+ a_{2}x^{2}+ a_{1}x + a_{0}

McCal has a rich set of functions for handling polynomials, such as multiplication, devision, and equation solver.

In McCal, 1-dimensional arrays (vectors) of coefficents are used to represent polynomials of single variable, ordered by descending power. In the above case, polynomial functions of McCal take [a_{4}, a_{3}, a_{2}, a_{1}, a_{0}] as the polynomial argument.

For example, [1,0,-2,-5] is utilized to represent the following polynomial p(x).

p(x) = x^{3}- 2x - 5

In the screen-shot below, the coefficient array is passed to a McCal function called #polyVal(), to calculate the value of polynomial at x=1. The result is p(1)= -6.

The names of the McCal functions for handling polynomials start with "#poly". The documents of these functions are organized in the "Polynomial" under "System Function" of FunctionViewer.

In the example of the previous chapter, the polynomial is in "Natural-Display" at the lower-right corner of the screen shot. It is placed in a black box.

McCal uses 'x' for the variable of the polynomial in 'Natural-Display'. Please note that McCal uses black color for 'x', in order to show it's different from McCal memory, 'x', as shown in the following screen-shot.

In the above cases, the cofficient arrays were provided with box brackets, "[, ]". When a variable is used for the cofficient data, McCal uses 'Natural-Display' similar to other system functions. In the example below, 'p' hold the coefficients data.

McCal has a special function, #polySolv(), for solving polynomical equations. It takes a single argument for the coefficient array of the polynomial equation, and returns the roots of the equation in the vector format. We explain #polySolv() using examples.

**Example 1**

2x^{5}-13x^{4}+ 22x^{3}= 28x^{2}+ 40x - 25

First, move all elements to the left side of equation, so that the equation is something like f(x) = 0.

2x^{5}-13x^{4}+ 22x^{3}- 28x^{2}- 40x + 25 = 0

Next, just pass the corresponding coefficient array to #polySolv(). It returns the roots in an array.

#polySolv([2, -13, 22, -28, -40, 25]) ▶︎ array[5]

Just Press

button to view the content of the array, -1, 0.5, 1-2I, 1+2i, and 5.Or use the 'Print' command instead, as shown below.

Print #polySolv([2, -13, 22, -28, -40, 25]) ▽-1.000 ▽0.500 ▽1.000 -2.000i ▽1.000 +2.000i ▽5.000 ▶︎ array[5]

**Testing the roots**

Let's test the roots obtained in the previous chapter.

p = [2, -13, 22, -28, -40, 25]

First, save the coefficients in an array 'p' for later-reuse. Next, save the roots in a variable, 'a'.

a = #polySolv(p) ▶︎ array[5] Print a ▽-1.000 ▽0.500 ▽1.000 -2.000i ▽1.000 +2.000i ▽5.000

We calculate the value of polynomial, p(x), for each root using #polyVal() .
When the second argument of #polyVal() is an array (x_{i,j}), it just returns the array of which element is the value of polynomial, p(x_{i,j}).

Print #polyVal(p, a) ▽ 0 ▽0 ▽0 +0i ▽0 ▽ -9.202E-13 ▶︎ array[5]

As shown above, each element is almost zero, although it contains rounding errors between 10^{-12} ~ 10^{-14}.

**Testing the roots, #2**

In the example in the previous chapter, the returned array seems to include -1, 1/2, and 5. Let's divide the original polynomical with (x+1)(2x-1)(x-5). The remainder of the division should be zero, if -1, 1/2, and 5 are the roots of the polynomial equation.

Print #polyDiv(p, #polyMul([1,1],[2,-1],[1,-5])) ▽1 ▽-2 ▽5 ▽0 ▶︎ array[3], 0

#polyDiv() returns the quotient and remainder. As shown above, the remainder is zero. Thus,

2x^{5}-13x^{4}+22x^{3}-28x^{2}-40x+25 = (x+1)(2x-1)(x-5)(x^{2}-2x+5)

The names of the system functions start with "#poly." The documents are organized under FunctionViewer→"System Function"→"Polynomial". Here is a summary of some functions.

Polynomial value **#polyVal(p,x)**: Returns the value of p(x). When the second argument is an array (x_{i,j}), this function returns the array of which element is p((x_{i}).

Addition, subtraction, multiplication, division **#polyAdd(a, b)**, **#polySub(a, b)**, **#polyMul(a, b)**, **#polyDiv(a, b)**.

Solving the given polynomial equation: **#polySolv(p)**.

Derived function: **#polyDer(p)**.