diff --git a/introduction/serie_2.py b/introduction/serie_2.py index e6811ae..c86393f 100644 --- a/introduction/serie_2.py +++ b/introduction/serie_2.py @@ -4,32 +4,46 @@ import numpy as np # %% print("Aufgabe 4") -def fixpunkt_iteration(f, x, tol=1e-7): +def fixpunkt_iteration(f, x=1.0, tol=1e-7, N=1000): x_new = f(x) i = 0 while(np.abs(x_new-x) > tol): + if i > N: + raise RuntimeError("Keine Konvergenz erreicht") + x = x_new x_new = f(x) i += 1 return [x_new, i] -x0 = 1.0 - -f = lambda x: 1-(1/5)*x -fixpunkt_a, iterationen_a = fixpunkt_iteration(f, x0) - -f = np.cos -fixpunkt_b, iterationen_b = fixpunkt_iteration(f, x0) - -f = lambda x: np.e**-x -fixpunkt_c, iterationen_c = fixpunkt_iteration(f, x0) - # Ausgabe print("----------------------------------------------------------------------") print(__file__) print("----------------------------------------------------------------------") -print(f"a) f(x) = 1-(1/5)*x\nFixpunkt: {fixpunkt_a}\nIterationen: {iterationen_a}\n") -print(f"b) f(x) = cos(x)\nFixpunkt: {fixpunkt_b}\nIterationen: {iterationen_b}\n") -print(f"c) f(x) = e⁻x\nFixpunkt: {fixpunkt_c}\nIterationen: {iterationen_c}\n") + +f = lambda x: 1-(1/5)*x +try: + fixpunkt_a, iterationen_a = fixpunkt_iteration(f) +except RuntimeError as error: + print(f"a) f(x) = 1-(1/5)*x\n{error}") +else: + print(f"a) f(x) = 1-(1/5)*x\nFixpunkt: {fixpunkt_a}\nIterationen: {iterationen_a}\n") + +f = np.cos +try: + fixpunkt_b, iterationen_b = fixpunkt_iteration(f) +except RuntimeError as error: + print(f"b) f(x) = cos(x)\n{error}") +else: + print(f"b) f(x) = cos(x)\nFixpunkt: {fixpunkt_b}\nIterationen: {iterationen_b}\n") + +f = lambda x: np.e**-x +try: + fixpunkt_c, iterationen_c = fixpunkt_iteration(f) +except RuntimeError as error: + print(f"c) f(x) = e⁻x\n{error}") +else: + print(f"c) f(x) = e⁻x\nFixpunkt: {fixpunkt_c}\nIterationen: {iterationen_c}\n") + print("----------------------------------------------------------------------")