0% found this document useful (0 votes)
55 views3 pages

Root Finding

The document discusses and provides examples of several root finding methods including fsolve, bisection, Newton-Raphson, and compares their results on simple functions. Code examples are provided to find the root of x^2 - 2 using fsolve, bisection down to 0.1 and 0.01 tolerances, and Newton-Raphson, all of which closely approximate the expected sqrt(2) solution. Additionally, fsolve is used to find the roots of x^3 - 100x^2 - x + 100.

Uploaded by

yashsonone25
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
55 views3 pages

Root Finding

The document discusses and provides examples of several root finding methods including fsolve, bisection, Newton-Raphson, and compares their results on simple functions. Code examples are provided to find the root of x^2 - 2 using fsolve, bisection down to 0.1 and 0.01 tolerances, and Newton-Raphson, all of which closely approximate the expected sqrt(2) solution. Additionally, fsolve is used to find the roots of x^3 - 100x^2 - x + 100.

Uploaded by

yashsonone25
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

Root Finding

[1]: # Using 'fsolve' to find roots


import numpy as np
from scipy import optimize

f = lambda x: x**2-2
r = optimize.fsolve(f, 1)
print(”r =”, r)

# Verify the solution is a root


output = f(r)
print(”output=”, output)

r = [1.41421356]
output= [-8.8817842e-16]

[2]: f = lambda x: 1/x

r, infodict, ier, mesg = optimize.fsolve(f, -2, full_output=True)


print(”r =”, r)

result = f(r)
print(”result=”, result)
print(mesg)

r = [-3.52047359e+83]
result= [-2.84052692e-84]
The number of calls to function has reached maxfev = 400.

[3]: # Bisection Method

import numpy as np

def my_bisection(f, a, b, tol):


'''approximates a root, R, of f bounded
by a and b to within tolerance
| f(m) | < tol with m being the midpoint
between a and b. Recursive implementation'''

# check if a and b bound a root


if np.sign(f(a)) == np.sign(f(b)):
raise Exception(”The scalars a and b do not bound a root”)

1
# get midpoint
m = (a + b)/2
if np.abs(f(m)) < tol:
# stopping condition, report m as root
return m
elif np.sign(f(a)) == np.sign(f(m)):
# case where m is an improvement on a.
# Make recursive call with a = m
return my_bisection(f, m, b, tol)
elif np.sign(f(b)) == np.sign(f(m)):
# case where m is an improvement on b.
# Make recursive call with b = m
return my_bisection(f, a, m, tol)

[4]: # Example f(x) = x^2 - 2 using Bisection Method

f = lambda x: x**2-2

r1 = my_bisection(f,0,2,0.1)
print(”r1 = ”, r1)
print(”f(r1) = ”, f(r1))

r2 = my_bisection(f,0,2,0.01)
print(”\nr2 = ”, r2)
print(”f(r2) = ”, f(r2))

r1 = 1.4375
f(r1) = 0.06640625

r2 = 1.4140625
f(r2) = -0.00042724609375

[5]: # Newton Raphson Method


import numpy as np

f = lambda x: x**2 - 2
f_prime = lambda x: 2*x

x_i = 1.4 - (f(1.4))/(f_prime(1.4))

print(”newton_raphson =”, x_i)


print(”sqrt(2) =”, np.sqrt(2))

newton_raphson = 1.4142857142857144
sqrt(2) = 1.4142135623730951

[6]: # fsolve

from scipy.optimize import fsolve

2
f = lambda x: x**3-100*x**2-x+100

#fsolve(f,x0)
fsolve(f, [2, 80])

[6]: array([ 1., 100.])

[ ]:

You might also like