Numworks: Quadratic Equation and Newton's Method - Do Guesses Matter?
Introduction
Let A, B, C, be positive, non-zero coefficients of the quadratic equation:
Ax^2 + Bx - C = 0 with A > 0, B > 0, C > 0
First, start with an initial guess x0 = 0. Count how many iterations it takes for the method to reach a suitable answer. For this experiment, we will use a tolerance of 8 decimal places (tol = 1E-8), setting a maximum of 200 iterations.
Consider a "reduced" equation to obtain guesses for the original equation:
Ax^2 - C = 0
Hence, our initial guesses are x0 = √(C/A) and x0 = -√(C/A)
Using Newton's Method to determine the roots with a guess of x0:
x_n+1 = x_n - [Ax^2 + Bx - C]/[2Ax + B]
So which of the following guesses gets us to a solution faster?
x0 = 0
x0 = √(C/A)
x0 = -√(C/A)
The Python script below tests the question.
Python Test Script: guesttest.py
from math import *
def testf(a,b,c,w0):
n=1
w1=1
while abs(w1)>1e-8
w1=(a*w0**2+b*w0-c)/(2*a*w0+b)
w0=w0-w1
n=n+1
if n==201:
print('Exceeded iterations')
break
print('Root: '+str(w0)
print('Iterations: '+str(n))
return
# EWS 2020-08-10
print("y=ax**2+bx-c=0")
print("a>0,b>0,c>0")
a=float(input('a? '))
b=float(input('b? '))
c=float(input('c? '))
# initial conditions
x1=0
x2=sqrt(c/a)
x3=-sqrt(c/a)
# results
print('x1: '+str(x1))
testf(a,b,c,x1)
print('----')
print('x2: '+str(x2))
testf(a,b,c,x2)
print('----')
print('x3: '+str(x3))
testf(a,b,c,x3)
print('----')
Results
Test Results - Iterations Used to get to a Solution
Ax^2 + Bx - C = 0 with A > 0, B > 0, C > 0
A | B | C | x0 = 0 | x0 = √(C/A) | x0 =-√(C/A) |
---|---|---|---|---|---|
1 | 1 | 4 | 6 | 6 | 8 |
1 | 4 | 4 | 6 | 6 | error reached |
1 | 5 | 4 | 6 | 6 | 9 |
1 | 5 | 6 | 6 | 6 | 12 |
2 | 5 | 6 | 6 | 6 | 8 |
3 | 5 | 6 | 7 | 6 | 7 |
8 | 13 | 81 | 8 | 6 | 6 |
16 | 13 | 81 | 8 | 5 | 6 |
32 | 13 | 81 | 9 | 5 | 5 |
64 | 13 | 81 | 9 | 5 | 5 |
1 | 40 | 10 | 5 | 6 | 6 |
1 | 40 | 25 | 5 | 6 | 6 |
1 | 40 | 40 | 5 | 6 | 7 |
1 | 40 | 55 | 6 | 6 | 8 |
10 | 18 | 42 | 7 | 6 | 7 |
10 | 18 | 52 | 7 | 6 | 6 |
10 | 18 | 62 | 7 | 6 | 6 |
10 | 18 | 72 | 7 | 6 | 6 |