1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| def fder(p):
X = np.linspace(0,np.pi,p)
F = np.sin(X) ## fonction à dériver
COSX = np.cos(X) ## solution exacte de la dérivée pour comparaison
D = []
C = []
for i in range(0,p-1):
D += [(F[i+1]-F[i])/(X[i+1]-X[i])] ## calcul de la dérivée droite
for j in range(1,p-2):
C += [(F[j+1]-F[j-1])/(X[j+1]-X[j-1])] ## calcul de la dérivée centrée
E = [abs(np.max(COSX[0:p-1] - D))] ## on stocke l'erreur de la dérivée droite dans un tableau
E2 = [abs(np.max(COSX[1:p-2] - C))] ## on stocke l'erreur de la dérivée centrée dans deuxième tableau
## print(len(E1))
## print(len(E2))
## print(len(E2))
## print("Erreur sur dérivée droite = ",E)
## print("Erreur sur dérivée centrée =", E2)
## plt.plot(X[1:p-2], C, label="Dérivée centrée")
## plt.plot(X[0:p-1], D, label="Dérivée droite")
## plt.plot(X, COSX, label="Dérivée exacte")
## plt.xlabel('X')
## plt.ylabel('Dérivée')
## plt.legend()
## plt.show()
return(E, E2)
## print(X,np.asarray(D))
## print(len(X))
## print(len(D))
## print(len(C))
## print(X[0:p])
## print(C)
## print(X,D)
## print(C)
def fder2(a): ## on créer une deuxième fonction pour le tracé de l'erreur,
##cette fonction fait intervenir notre première fonction, du calcul de la dérivée
dx = np.linspace((10**(-7)),(10**(-1)),a) ## On veut créer un pas compris sur [10^-7;10^-1]
x = []
R = []
P = []
for i in range(0,a):
x += [np.pi/dx[i]]
for j in range(1,a):
R += [fder(int(x[j]))[1]] ## on stocke le calcul de l'erreur pour la dérivée droite, on a fait appel à notre première fonction
## pour le calcul de l'erreur sur la dérivée droite
plt.loglog(dx[0:a-1],R)
## for k in range(1,len(dx)):
## P += [fder(int(x[k]))[2]]
## plt.loglog(dx[0:a-1],P)
plt.show() |
Partager