""" Podstawy Fizyki IV - cwiczenia 2, zadanie 1 i 2""" import math def newton(f,Df,x0,epsilon,max_iter): '''Przyblizone rozwiazanie f(x)=0 otrzymane przy wykorzystaniu algorytmu Newtona. Parametry ---------- f : funkcja Funkcja dla ktorej szukamy miejsc zerowych f(x)=0. Df : funkcja Pochodna funkcji f(x). x0 : liczba zmiennoprzecinkowa Warunek poczatkowy, przyblizone rozwiazanie rownania f(x)=0. epsilon : liczba zmiennoprzecinkowa Algorytm jest konczony gdy abs(f(x)) < epsilon. max_iter : liczba calkowita Maksymalna liczba iteracji w metodzie Newtona Zwraca ------- xn : liczba zmiennoprzecinkowa Implementacja algorytmu Newtona: oblicz liniowe przyblizenie f(x) dla xn oraz znajdz x zadany rownaniem x = xn - f(xn)/Df(xn) Kontynuuj tak dluga az abs(f(xn)) < epsilon i zwroc xn. Gdy Df(xn) == 0, zwroc None. gdy liczba iteracji jest wieksza niz max_iter, wtedy zwroc None. ''' xn = x0 for n in range(0,max_iter): fxn = f(xn) if abs(fxn) < epsilon: print("Liczba iteracji:") print(n) return xn Dfxn = Df(xn) if Dfxn == 0: print('Pochodna wynosi zero. Nie znaleziono rozwiazania.') return None xn = xn - fxn/Dfxn print('Przekroczono maksymalna liczbe iteracji. Nie znaleziono rozwiazania.') return None p = lambda x: x-3*(1-math.exp(-x)) Dp = lambda x: 1-3*math.exp(-x) approx = newton(p,Dp,3,1e-10,10) print("Rozwiazanie rownania x-3[1-e^(-x)]=0 (warunek poczatkowy x0=3):") print(approx) g = lambda x: x-5*(1-math.exp(-x)) Dg = lambda x: 1-5*math.exp(-x) approx2 = newton(g,Dg,5,1e-10,10) print("Rozwiazanie rownania x-5[1-e^(-x)]=0 (warunek poczatkowy x0=5):") print(approx2)