2022-11-03 11:18:09 +01:00
|
|
|
import math
|
|
|
|
|
|
|
|
import numpy as np
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
|
|
|
|
|
|
|
def f(x):
|
|
|
|
return math.pow(math.e, math.pow(x, 2)) + math.pow(x, -3) - 10
|
|
|
|
|
|
|
|
|
|
|
|
def f_diff(x):
|
|
|
|
return 2 * x * math.pow(math.pow(math.e, x), 2) - 3 * math.pow(x, -4)
|
|
|
|
|
|
|
|
|
2022-11-03 11:34:51 +01:00
|
|
|
def newtonStep(xn, function, function_diff):
|
|
|
|
return xn - (function(xn)) / (function_diff(xn))
|
2022-11-03 11:18:09 +01:00
|
|
|
|
2022-11-03 11:34:51 +01:00
|
|
|
def simpleNewtonStep(xn, function, function_diff_x0):
|
|
|
|
return xn - ((function(xn)) / (function_diff_x0))
|
|
|
|
|
|
|
|
def secantStep(xn, xn_1, function):
|
|
|
|
return xn - (xn - xn_1)/(function(xn) - function(xn_1)) * f(xn)
|
2022-11-03 11:18:09 +01:00
|
|
|
|
|
|
|
def newton(x0, iterations, function, function_diff):
|
2022-11-03 11:23:01 +01:00
|
|
|
print("Newton Verfahren:")
|
2022-11-03 11:18:09 +01:00
|
|
|
x = []
|
|
|
|
x.append(x0)
|
|
|
|
print("x" + str(0) + ":", str(x[0]))
|
|
|
|
for i in range(iterations):
|
2022-11-03 11:34:51 +01:00
|
|
|
x.append(newtonStep(xn=x[i], function=function, function_diff=function_diff))
|
2022-11-03 11:18:09 +01:00
|
|
|
print("x" + str(i + 1) + ":", str(x[i + 1]))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
newton(x0=2, iterations=4, function=f, function_diff=f_diff)
|
2022-11-03 11:23:01 +01:00
|
|
|
simpleNewton(x0=0.5, iterations=4, function=f, function_diff=f_diff)
|