The application of Synthetic division in Polynomial theory
by fungarwai, Feb 9, 2023, 4:40 AM
Power sum of polynomial roots
Synthetic division can be applied to find the power sums of roots of a polynomial
by dividing
with 
has two real roots 


The coefficients of the quotient show that

This result is caused by the formula
Reference: The application of Synthetic division in Polynomial theory (Chinese) Section 1.1.5
Proof
Example
Python program to generate Synthetic division in LaTeX code
pywindow code
Synthetic division can be applied to find the power sums of roots of a polynomial

by dividing






The coefficients of the quotient show that

This result is caused by the formula

Reference: The application of Synthetic division in Polynomial theory (Chinese) Section 1.1.5
Proof
Let
,
Suppose
, the Laurent series of
can be expressed as


Each term in the Laurent series is unique.
As the coefficients of the quotient are determined one by one with Synthetic division, the power sums of polynomial roots are computed.

Suppose




Each term in the Laurent series is unique.
As the coefficients of the quotient are determined one by one with Synthetic division, the power sums of polynomial roots are computed.
Example
a,b,c are roots of the equation x³-9x+9 = 0.
Find the value of -
1/a³ + 1/b³ + 1/c³
1/a⁵ + 1/b⁵ + 1/c⁵.
Reference: Sum of powers of roots

Let
Compute
with Synthetic division

i.e.
Find the value of -
1/a³ + 1/b³ + 1/c³
1/a⁵ + 1/b⁵ + 1/c⁵.
Reference: Sum of powers of roots

Let

Compute


i.e.

Python program to generate Synthetic division in LaTeX code
dividend=[27,-18,0];#input by user, 27x^2-18x for example divisor=[9,-9,0,1];#input by user, 9x^3-9x^2+1 for example def roundint(x): if x == int(x): return str(int(x)) else: for k in range(1,100): T=0 if x*k == int(x*k): T=1;break; if T==1: return "\dfrac{"+str(int(x*k))+"}{"+str(k)+"}" else: return str(round(x,3)) qlen=11;e=0; dlen=len(divisor)-1; ddlen=len(dividend); dd="~ " for k in range(0,ddlen): dividend[k]=dividend[k]/divisor[0] dd=dd+"& "+roundint(dividend[k])+" " for k in range(0,qlen-ddlen+1): dividend.append(0) dd=dd+"\\\\\n" for k in range(1,dlen+1): divisor[k]=-divisor[k]/divisor[0] q=[] q.append(dividend[0]) qq="~ & "+roundint(q[0])+" " s="$\\begin{array}{c|" s2=[] for k in range(1,dlen+1): s2.append(roundint(divisor[k])+" ") for k in range(0,dlen): for i in range(0,k+1): s2[k]=s2[k]+"& ~ " for i in range(0,qlen-dlen): t=dividend[i+1] for k in range(0,dlen): tt=q[i]*divisor[k+1] s2[k]=s2[k]+"& "+roundint(tt)+" " if i-k >= 0: t=t+q[i-k]*divisor[k+1] q.append(t) if t==0: e=e+1 else: e=0 if e>=dlen and i>=ddlen-1: break qq=qq+"& "+roundint(t)+" " for i in range(qlen-dlen,qlen-1): if e>=dlen and i>=ddlen-1: break t=dividend[i+1] for k in range(0,dlen): if i-k < qlen-dlen: t=t+q[i-k]*divisor[k+1] q.append(t) qq=qq+"& "+roundint(t)+" " for k in range(0,qlen+1): s=s+"c" s=s+"}\n"+dd for k in range(0,dlen): s=s+s2[k]+"\\\\\n" s=s+"\\hline\n"+qq+"\\end{array}$" print(s)
pywindow code
[pywindow]
dividend=[27,-18,0];#input by user, 27x^2-18x for example
divisor=[9,-9,0,1];#input by user, 9x^3-9x^2+1 for example
def roundint(x):
if x == int(x):
return str(int(x))
else:
for k in range(1,100):
T=0
if x*k == int(x*k):
T=1;break;
if T==1:
return "\dfrac{"+str(int(x*k))+"}{"+str(k)+"}"
else:
return str(round(x,3))
qlen=11;e=0;
dlen=len(divisor)-1;
ddlen=len(dividend);
dd="~ "
for k in range(0,ddlen):
dividend[k]=dividend[k]/divisor[0]
dd=dd+"& "+roundint(dividend[k])+" "
for k in range(0,qlen-ddlen+1):
dividend.append(0)
dd=dd+"\\\\\n"
for k in range(1,dlen+1):
divisor[k]=-divisor[k]/divisor[0]
q=[]
q.append(dividend[0])
qq="~ & "+roundint(q[0])+" "
s="$\\begin{array}{c|"
s2=[]
for k in range(1,dlen+1):
s2.append(roundint(divisor[k])+" ")
for k in range(0,dlen):
for i in range(0,k+1):
s2[k]=s2[k]+"& ~ "
for i in range(0,qlen-dlen):
t=dividend[i+1]
for k in range(0,dlen):
tt=q[i]*divisor[k+1]
s2[k]=s2[k]+"& "+roundint(tt)+" "
if i-k >= 0:
t=t+q[i-k]*divisor[k+1]
q.append(t)
if t==0:
e=e+1
else:
e=0
if e>=dlen and i>=ddlen-1:
break
qq=qq+"& "+roundint(t)+" "
for i in range(qlen-dlen,qlen-1):
if e>=dlen and i>=ddlen-1:
break
t=dividend[i+1]
for k in range(0,dlen):
if i-k < qlen-dlen:
t=t+q[i-k]*divisor[k+1]
q.append(t)
qq=qq+"& "+roundint(t)+" "
for k in range(0,qlen+1):
s=s+"c"
s=s+"}\n"+dd
for k in range(0,dlen):
s=s+s2[k]+"\\\\\n"
s=s+"\\hline\n"+qq+"\\end{array}$"
print(s)
[/pywindow]
This post has been edited 1 time. Last edited by fungarwai, Feb 9, 2023, 4:57 AM