import time
import random
import math
from typing import *
def newton(f, fder, x0, iteration_limit=1000, tolerance=1e-10) -> Tuple[float, int]:
i = 0
xn = x0
xn_1 = x0
while i < iteration_limit and not math.isclose(f(xn), 0, abs_tol=tolerance):
xn = xn_1 - f(xn_1) / fder(xn_1)
xn_1 = xn
i += 1
return (xn, i)
def find_null_point(f, fder, x0) -> None:
calculation_start = time.perf_counter()
(null_point, iterations_needed) = newton(f, fder, x0)
calculation_end = time.perf_counter()
calculation_time = calculation_end - calculation_start
print("Newtons method result: {} (f(x): {}, iterations needed: {}, starting point: {}, time spent: {})".format(
null_point, f(null_point), iterations_needed, x0, calculation_time))
f = lambda x: x - 3
fder = lambda x: 1
g = lambda x: x**2 - 3
gder = lambda x: 2 * x
x0 = random.uniform(-100, 100) # start at random x0 point at x axis
find_null_point(f, fder, x0)
find_null_point(g, gder, x0)
aW1wb3J0IHRpbWUKaW1wb3J0IHJhbmRvbQppbXBvcnQgbWF0aApmcm9tIHR5cGluZyBpbXBvcnQgKgoKCmRlZiBuZXd0b24oZiwgZmRlciwgeDAsIGl0ZXJhdGlvbl9saW1pdD0xMDAwLCB0b2xlcmFuY2U9MWUtMTApIC0+IFR1cGxlW2Zsb2F0LCBpbnRdOgogICAgaSA9IDAKICAgIHhuID0geDAKICAgIHhuXzEgPSB4MAogICAgd2hpbGUgaSA8IGl0ZXJhdGlvbl9saW1pdCBhbmQgbm90IG1hdGguaXNjbG9zZShmKHhuKSwgMCwgYWJzX3RvbD10b2xlcmFuY2UpOgogICAgICAgIHhuID0geG5fMSAtIGYoeG5fMSkgLyBmZGVyKHhuXzEpCiAgICAgICAgeG5fMSA9IHhuCiAgICAgICAgaSArPSAxCiAgICByZXR1cm4gKHhuLCBpKQoKCmRlZiBmaW5kX251bGxfcG9pbnQoZiwgZmRlciwgeDApIC0+IE5vbmU6CiAgICBjYWxjdWxhdGlvbl9zdGFydCA9IHRpbWUucGVyZl9jb3VudGVyKCkKICAgIChudWxsX3BvaW50LCBpdGVyYXRpb25zX25lZWRlZCkgPSBuZXd0b24oZiwgZmRlciwgeDApCiAgICBjYWxjdWxhdGlvbl9lbmQgPSB0aW1lLnBlcmZfY291bnRlcigpCiAgICBjYWxjdWxhdGlvbl90aW1lID0gY2FsY3VsYXRpb25fZW5kIC0gY2FsY3VsYXRpb25fc3RhcnQKCiAgICBwcmludCgiTmV3dG9ucyBtZXRob2QgcmVzdWx0OiB7fSAoZih4KToge30sIGl0ZXJhdGlvbnMgbmVlZGVkOiB7fSwgc3RhcnRpbmcgcG9pbnQ6IHt9LCB0aW1lIHNwZW50OiB7fSkiLmZvcm1hdCgKICAgICAgICBudWxsX3BvaW50LCBmKG51bGxfcG9pbnQpLCBpdGVyYXRpb25zX25lZWRlZCwgeDAsIGNhbGN1bGF0aW9uX3RpbWUpKQoKCmYgPSBsYW1iZGEgeDogeCAtIDMKZmRlciA9IGxhbWJkYSB4OiAxCmcgPSBsYW1iZGEgeDogeCoqMiAtIDMKZ2RlciA9IGxhbWJkYSB4OiAyICogeAp4MCA9IHJhbmRvbS51bmlmb3JtKC0xMDAsIDEwMCkgIyBzdGFydCBhdCByYW5kb20geDAgcG9pbnQgYXQgeCBheGlzCmZpbmRfbnVsbF9wb2ludChmLCBmZGVyLCB4MCkKZmluZF9udWxsX3BvaW50KGcsIGdkZXIsIHgwKQ==