Trying to get working functions evaluate_poly(poly,x_n) and compute_deriv2(poly,x_n) to work inside the function compute_root(poly,x_n,epsilon)
The code runs, no errors are thrown but nothing is returned. Here is the code
# 6.00 Problem Set 2
#
# Successive Approximation
#
def evaluate_poly(poly, x_n):
"""
Computes the polynomial function for a given value x. Returns that value.
Example:
>>> poly = (0.0, 0.0, 5.0, 9.3, 7.0) # f(x) = 7x^4 + 9.3x^3 + 5x^2
>>> x = -13
>>> print evaluate_poly(poly, x) # f(-13) = 7(-13)^4 + 9.3(-13)^3 + 5(-13)^2
180339.9
poly: tuple of numbers, length > 0
x: number
returns: float
"""
valHolder=0
for i in range((0),(len(poly))):
valHolder=valHolder+(poly[i])*(x_n** i)
return float(valHolder)
def compute_deriv(poly):
"""
Computes and returns the derivative of a polynomial function. If the
derivative is 0, returns (0.0,).
Example:
>>> poly = (-13.39, 0.0, 17.5, 3.0, 1.0) # x^4 + 3x^3 + 17.5x^2 - 13.39
>>> print compute_deriv(poly) # 4x^3 + 9x^2 + 35^x
(0.0, 35.0, 9.0, 4.0)
poly: tuple of numbers, length > 0
returns: tuple of numbers
"""
newList=list(poly)
for i in range((0),(len(poly))):
##if i > 0.0:
a=newList[i]
b=i
if b == 0:
continue
else:
derivedNumber=a*b
newList.append(derivedNumber)
finishedTuple=tuple(newList)
return finishedTuple[len(poly):]
print "FINISHED TUPLE IS= ",finishedTuple
def compute_deriv2(poly,x_n):
"""
Similar to first compute_deriv, this time takes a value for x
"""
newList=list(poly)
for i in range((0),(len(poly))):
##if i > 0.0:
a=newList[i]
b=i
if b == 0:
continue
else:
derivedNumber=a*b
newList.append(derivedNumber)
finishedTuple=tuple(newList[len(poly):])
derivedValue=0
for g in range((0),len(finishedTuple)):
c=finishedTuple[g]
d=g
derivedValue+=c*(x_n**d)
return derivedValue
def compute_root(poly, x_n, epsilon):
"""
Uses Newton's method to find and return a root of a polynomial function.
Returns a tuple containing the root and the number of iterations required
to get to the root.
Example:
>>> poly = (-13.39, 0.0, 17.5, 3.0, 1.0) #x^4 + 3x^3 + 17.5x^2 - 13.39
>>> x_0 = 0.1
>>> epsilon = .0001
>>> print compute_root(poly, x_0, epsilon)
(0.80679075379635201, 8.0)
poly: tuple of numbers, length > 1.
Represents a polynomial function containing at least one real root.
The derivative of this polynomial function at x_0 is not 0.
x_0: float
epsilon: float > 0
returns: tuple (float, int)
"""
evaluate_poly(poly,x_n)
compute_deriv2(poly,x_n)
newList=list(poly)
Here is the input I use.
>>>>compute_root((-13.39,0.0,17.5,3.0,1.0),0.1,0.0001)
All of the individual functions work when I call them by themselves, except for the compute_root one. Any idea how I should close this to make it work? Do I have to define them again inside the compute_root function?