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 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
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 , 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.
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 with Synthetic division
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