# mise en évidence de a méthode de Newton from math import * import numpy as NP import matplotlib.pyplot as P N=int(input("N=")) x_0=float(input("x_0=")) def f(x): return (x**3+x-3) def f_prime(x): return (3*x**2+1) def MethodeNewton(f, f_prime, x_0, N): x=[x_0] for i in range(N): x.append(x[i] - f(x[i])/f_prime(x[i])) return x print(MethodeNewton(f, f_prime,2,5)) # cette fois-ci, on trace la fonction, les différents itérés en abscisse et sur la courbe # f est la fonction, f_prime sa dérivée, x_0 son point initial, N le nb d'itération, # et I = [a;b] l'intervalle sur lequel on représente la courbe def TracerMethodeNewton(f, f_prime, x_0, N, a, b): # l'abscisse des points itérés x_i = x_0 y_i = f(x_0) # les listes des coordonnées de points ListeAbs = [x_i] ListeOrd = [y_i] # on calcule les coordonnées des points sur la courbe for i in range(N): x_i = x_i - f(x_i)/f_prime(x_i) ListeAbs.append(x_i) y_i = f(x_i) ListeOrd.append(y_i) # on crée la liste de points # 1. la liste des points sur la courbe P.scatter(ListeAbs,ListeOrd, s = 8, c = 'green') # 2. la liste des points sur l'axe des abscisses ListeOrdNulles = [0] * len(ListeAbs) P.scatter(ListeAbs,ListeOrdNulles, s = 8, c = 'green') # 3. on trace la courbe x = NP.linspace(a,b,100) P.plot(x, f(x), c = 'red') # 4. on trace les pointillés qui marquent les abscisses des points itérés for i in range(N): segment_x = NP.array([ListeAbs[i],ListeAbs[i]]) segment_y = NP.array([ListeOrdNulles[i],ListeOrd[i]]) P.plot(segment_x, segment_y, c = 'green', linestyle = '--') # 5. on trace les tangentes for i in range(N): tangente_x = NP.array([ListeAbs[i],ListeAbs[i+1]]) tangente_y = NP.array([ListeOrd[i],0]) P.plot(tangente_x, tangente_y, c = 'blue', linestyle = ':') # 6. on affiche les axes pour qu'ils passent par l'origine P.title("Résolution par la méthode de Newton de l'équation f(x) = 0 sur I = [" + str(a) + ";" + str(b) + "] en partant de " + r"$x_0$ = " + str(x_0)) ax = P.gca() ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.spines['bottom'].set_position(('data',0)) ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data',0)) # on affiche le graphe P.show() return x_i #print(TracerMethodeNewton(f, f_prime, 2, 3, 1, 2.1)) # Avec ANIMATION! On trace la fonction, les différents itérés en abscisse et sur la courbe # f est la fonction, f_prime sa dérivée, x_0 son point initial, N le nb d'itération, # et I = [a;b] l'intervalle sur lequel on représente la courbe # tps est le temps d'attente entre deux tracés def TracerMethodeNewtonAnimation(f, f_prime, x_0, N, a, b, tps): # l'abscisse des points itérés x_i = x_0 y_i = f(x_0) # les listes des coordonnées de points ListeAbs = [x_i] ListeOrd = [y_i] # on calcule les coordonnées des points sur la courbe for i in range(N): x_i = x_i - f(x_i)/f_prime(x_i) ListeAbs.append(x_i) y_i = f(x_i) ListeOrd.append(y_i) # 1. on affiche les axes pour qu'ils passent par l'origine ax = P.gca() ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.spines['bottom'].set_position(('data',0)) ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data',0)) P.title("Résolution par la méthode de Newton de l'équation f(x) = 0 sur I = [" + str(a) + ";" + str(b) + "] en partant de " + r"$x_0$ = " + str(x_0)) # 2. on trace la courbe x = NP.linspace(a,b,100) P.plot(x, f(x), c = 'red') for i in range(N + 1): # 3. la liste des points sur l'axe des abscisses P.scatter(ListeAbs[i],0, s = 8, c = 'green') P.text(ListeAbs[i],0, " x" + str(i) ,va = 'bottom', ha = 'left') P.pause(tps) # 4. on trace les pointillés qui marquent les abscisses des points itérés segment_x = NP.array([ListeAbs[i],ListeAbs[i]]) segment_y = NP.array([0,ListeOrd[i]]) P.plot(segment_x, segment_y, c = 'green', linestyle = '--') P.pause(tps) # 5. la liste des points sur la courbe P.scatter(ListeAbs[i],ListeOrd[i], s = 8, c = 'green') P.text(ListeAbs[i],ListeOrd[i], "M" + str(i)+ " ",va = 'bottom', ha = 'right') P.pause(tps) # 6. on trace les tangentes if (i!=N): tangente_x = NP.array([ListeAbs[i],ListeAbs[i+1]]) tangente_y = NP.array([ListeOrd[i],0]) P.plot(tangente_x, tangente_y, c = 'blue', linestyle = ':') P.pause(tps) # on affiche le graphe P.show() return x_i print(TracerMethodeNewtonAnimation(f, f_prime, 2, 3, 1, 2.1, 2))