Bonjour,

Après pas mal de temps à essayé de trouver mes erreurs, je sollicite, votre aide concernant deux exercices qui consistent à réaliser dans un premier temps une dérivation numérique, une dérivée droite et centrée, et tracer l'erreur maximale en fonction d'une liste de pas compris entre 10^-7 et 10^-1 en représentation logarithmique. Pour la dérivée droite , lorsque je fais appel à ma fonction fder2 avec comme argument un nombre qui donne le nombre de pas pour une liste compris entre 10^-7 et 10^-1, j'obtiens une courbe qui change, ce qui ne devrait pas être le cas normalement...

Seul la deuxième fonction est appelé par l'utilisateur

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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()
Le second problème se pose pour la dérivée centrée, j'ai passé en commentaire dans fder2 ce qui posait problème pour pouvoir travailler sur la dérivée droite. J'ai une erreur de ce type, un problème d'indice il me semble :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    fder2(100)
  File "/home/user/Documents/TestRenduavant.py", line 58, in fder2
    P += [fder(int(x[k]))[2]]
IndexError: tuple index out of range
Merci d'avance pour votre aide !