import matplotlib pyplot as plt import of plotting
import matplotlib. pyplot as plt ##import of plotting library MAXITER = 1000 ##Default value(if not set by the user) TOL =0. 5 * 1 e-6 ##Default value def func(x): return x ** 3 + 2*x + 1 def bis(func, lower, upper, maxiter, tol): if lower >= upper: raise Value. Error(' Error: lower should be < = upper') if func(lower) == 0: return lower elif func(upper) == 0: return upper elif func(lower) * func(upper) > 0: raise Value. Error('Error: the interval does not contain the root') i, count = 0, 1 roots=[] while True: if count > maxiter: break center = (lower + upper) / 2 roots. append(center) if func(center)==0: print('THE ROOT AFTER {} ITERATIONS IS {}'. format(count, center)) break if len(roots) > 1 and abs(roots[i]-roots[i-1]) < tol: print('THE ROOT AFTER {} ITERATIONS IS {}'. format(count, roots[i])) break print('{: >6} {: >12. 8 f}'. format(count, lower, upper, center, func(center))) count += 1 if func(lower) * func(center) < 0: upper = center else: lower = center bis(func, -1, 1, 1000, 0. 5*1 e-6) ##Calling the function t=[i for i in range(0, len(roots))] ##Create list for iterations y=[p for p in roots] ##Create list for values of func using global list named roots fig=plt. figure(figsize=(9, 5)) ##Create a new figure(width, height) fig. suptitle('Convergence Bisection Method') plt. xlabel('Iterations') plt. ylabel('Roots') plt. plot(t, y) plt. show()
def func(x): return x ** 3 + 2*x + 1 def falsi(func, lower, upper, maxiter, tol): ΚΩΔΙΚΑΣ REGULA FALSI if lower >= upper: raise Value. Error(' Error: lower should be < = upper') if func(lower) == 0: return lower elif func(upper) == 0: return upper elif func(lower) * func(upper) > 0: raise Value. Error('Error: interval must contain the root') i, count = 0, 1 roots=[] while True: if count > maxiter: break p = upper - (func(upper) * ((lower-upper)/(func(lower)-func(upper)))) roots. append(p) if func(p)==0: print('THE ROOT IS {}'. format(center)) break if len(roots) > 1 and abs(roots[i]-roots[i-1]) <= tol: print('THE ROOT AFTER {} ITERATIONS IS {}'. format(count, roots[i])) break print('{: ^6} {: ^12. 8 f}'. format(count, lower, upper, p, func(p))) count += 1 if func(lower) * func(p) < 0: upper = p else: lower = p falsi(func, -1, 1, 1000, 0. 5*1 e-6) ##Calling the function t=[i for i in range(0, len(roots))] ##Create list for iterations y=[p for p in roots] ##Create list for values of p using global list fig=plt. figure(figsize=(9, 5)) ##Create a new figure(width, height) fig. suptitle('Convergence Regula Falsi') plt. xlabel('Iterations') plt. ylabel('Roots') plt. plot(t, y)
from scipy. misc import derivative import matplotlib. pyplot as plt ##import of plotting library MAXITER = 50 TOL = 1 e-5 ΚΩΔΙΚΑΣ NEWTON def f(x): return x ** 3 + 2*x + 1 def Newton(func, x 1, maxiter, tol): x = x 1 global roots##Set roots as global in order to be used outside of function roots=[x 1]##Insert into roots first root i=0##Set count for iterations and i for list indexing count = 1 while True: if count > maxiter: print('You exceeded {} iterations'. format(count)) break elif func(roots[i]) == 0: print('THE ROOT AFTER {} ITERATIONS IS {}'. format(count, roots[i])) break ##Checking difference between 2 consecutive roots elif len(roots) > 1 and abs(roots[i]-roots[i-1]) < tol: print('THE ROOT AFTER {} ITERATIONS IS {}'. format(count, roots[i])) break elif derivative(func, x, dx=1 e-6) != 0 : print('{: ^6} {: ^12. 8 f}'. format(count, x, func(x))) x= x - func(x) / derivative(func, x, dx=1 e-6)##Calculate roots. append(x)##Add root to list roots i+=1 count +=1 Newton(func, -1, 30, 0. 5*1 e-5) t=[i for i in range(0, len(roots))] ##Create list for iterations y=[p for p in roots] ##Create list for values of p using global list fig=plt. figure(figsize=(9, 5)) ##Create a new figure(width, height) fig. suptitle('Convergence Newton') plt. xlabel('Iterations') plt. ylabel('Roots') plt. plot(t, y) plt. show()
import matplotlib. pyplot as plt MAXITER = 1000 TOL = 0. 5*1 e-6 ΚΩΔΙΚΑΣ ΤΕΜΝΟΥΣΑΣ def func(x): return x**3+2*x+1 def secant(func, x 0, x 1, maxiter, tol): global lista=[x 0, x 1] count = 1 i=1 while True: if count > maxiter: break p = lista[i] - (func(lista[i]) * ((lista[i]-lista[i-1])/(func(lista[i])func(lista[i-1])))) lista. append(p) print('{: ^6} {: ^12. 8 f}'. format(i, lista[i], func(lista[i]))) if abs(p-lista[i]) <= tol or func(p) == 0: print('THE ROOT AFTER {} ITERATIONS IS {}'. format(count, p)) break else: i=i+1 count +=1 secant(func, -1, 1, 1000, 0. 5*1 e-6) t=[i for i in range(0, len(lista))] ##Create list for iterations y=[p for p in lista] ##Create list for values of p using global list fig=plt. figure(figsize=(9, 5)) ##Create a new figure(width, height) fig. suptitle('Convergence Secant Method') plt. xlabel('Iterations') plt. ylabel('Roots') plt. plot(t, y) plt. show()
def bis(func, lower, upper, maxiter, tol): if lower >= upper: raise Value. Error(' Error: lower should be < = upper') if func(lower) == 0: return lower elif func(upper) == 0: return upper elif func(lower) * func(upper) > 0: raise Value. Error('Error: the interval does not contain the root') i, count = 0, 1 roots=[] while True: if count > maxiter: break center = (lower + upper) / 2 roots. append(center) if func(center)==0: print('THE ROOT AFTER {} ITERATIONS IS {}'. format(count, center)) break if len(roots) > 1 and abs(roots[i]-roots[i-1]) < tol: print('THE ROOT AFTER {} ITERATIONS IS {}'. format(count, roots[i])) break print('{: >6} {: >12. 8 f}'. format(count, lower, upper, center, func(center))) count += 1 if func(lower) * func(center) < 0: upper = center else: lower = center
def falsi(func, lower, upper, maxiter, tol): if lower >= upper: raise Value. Error(' Error: lower should be < = upper') if func(lower) == 0: return lower elif func(upper) == 0: return upper elif func(lower) * func(upper) > 0: raise Value. Error('Error: interval must contain the root') i, count = 0, 1 roots=[] while True: if count > maxiter: break p = upper - (func(upper) * ((lower-upper)/(func(lower)-func(upper)))) roots. append(p) if func(p)==0: print('THE ROOT IS {}'. format(center)) break if len(roots) > 1 and abs(roots[i]-roots[i-1]) <= tol: print('THE ROOT AFTER {} ITERATIONS IS {}'. format(count, roots[i])) break print('{: ^6} {: ^12. 8 f}'. format(count, lower, upper, p, func(p))) count += 1 if func(lower) * func(p) < 0: upper = p else: lower = p
def Newton(func, x 1, maxiter, tol): from scipy. misc import derivative x = x 1 roots=[x 1] i=0 count = 1 while True: if count > maxiter: print('You exceeded {} iterations'. format(count)) break elif func(roots[i]) == 0: print('THE ROOT AFTER {} ITERATIONS IS {}'. format(count, roots[i])) break elif len(roots) > 1 and abs(roots[i]-roots[i-1]) < tol: print('THE ROOT AFTER {} ITERATIONS IS {}'. format(count, roots[i])) break else: print('{: ^6} {: ^12. 8 f}'. format(count, x, func(x))) x= x - func(x) / derivative(func, x, dx=1 e-6) roots. append(x) i+=1 count +=1
def secant(func, x 0, x 1, maxiter, tol): global lista=[x 0, x 1] i = 1 count = 1 while True: if i > maxiter: break p = lista[i] - (func(lista[i]) * ((lista[i]-lista[i 1])/(func(lista[i])-func(lista[i-1])))) lista. append(p) if abs(p-lista[i]) <= tol or func(p) == 0: for i in range(len(lista)): print('{: ^6} {: ^12. 8 f}'. format(i+1, lista[i], func(lista[i]))) print('THE ROOT AFTER break else: i=i+1 count = count+1 {} ITERATIONS IS {}'. format(count, p))
- Slides: 31