mardi 10 octobre 2017

Code en Python - suite récurrente


Ici je donne un code en Python 3 pour tracer le "colimaçon" donné par la suite

\[u_{n+1}= cos (u_n), \quad u_0= 1.4\]




u[ 0 ]= 1.4
u[ 1 ]= 0.1699671429 
u[ 2 ]= 0.985590325219
u[ 3 ]= 0.552371116616
u[ 4 ]= 0.851282774319
u[ 5 ]= 0.659018879935
u[ 6 ]= 0.790593392425
u[ 7 ]= 0.703423673509
u[ 8 ]= 0.762632118004
u[ 9 ]= 0.723020179449



Attention pour copier le code il faut avoir sélectionner l'article du blog et non d'essayer de le copier de la page principale du blog (car sinon il va compiler le latex qui est dans le code...)
?
01
02
03
04
05
06
07
08
09
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# on importe tout d'abord la librairie de maths
# le "as np" permet d'appeler une fonction de numpy en écrivant np seulement
# par exemple np.sin est pour le sinus
import numpy as np
# on importe la librairie de dessin
import matplotlib.pyplot as plt
# on définit notre fonction f
def f(x):
    return np.cos(x)
# on définit la suite u, ce sera un "array", u[0]=1.4 pour le moment
u=[1.4]
# on définit le nombre de point de récurrence
n=10
# on calcule maintenant les n itérations de la suite avec une boucle
# attention range(0,n) va de 0 à n-1.
for i in range(0,n):
    # les boucles les if et le reste sont fait avec des retraits (un tab)
    # avec u.append, on ajoute à l'array u un nouvel élément.
    # au premier tour on a u[1] qui est donné par f(u[0])
    # plus généralement, la commande u[i] va bien donner le i-ème terme de la suite
    u.append(f(u[i]))
    # on imprime les termes au fur et à mesure. Le vert est du texte et le noir
    # est de la donnée
    print('u[',i,']=',u[i])
# on définit les points d'abcisses qui vont servir pour tracer les fonctions
# on va de 0 à pi/2 (le np.pi appelle pi qui est dans la librairie numpy)
# et 0.01 est le pas
x=np.arange(0,np.pi/2,0.01)
# on trace x-> f(x) en b pour blue et - pour le choix du trait
# puis on trace x->x en r pour red et - pour le choix du trait
# en changeant le pas on rend le tracer de la fonction plus ou moins linéraire par morceaux
plt.plot(x, f(x), 'b-', x, x, 'r-')
# Ici on fait des axes jolis
ax = plt.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 trace maintenant les traits noir k correspond à black
for i in range(0,n-1):
    plt.plot([u[i], u[i+1]], [u[i+1], u[i+1]], 'k-')
    plt.plot([u[i+1], u[i+1]], [u[i+1], u[i+2]], 'k-')
    # dans la ligne suivante, on trace une ligne entre
    # (u[i],0) et u[i, u[i+1]]. Les "x" sont tous dans le premier crochet
    # et les "y" dans le deuxième
    # on met -- pour avoir un trait en pointillé
    plt.plot([u[i], u[i]], [0, u[i+1]], 'k--')
# il manque le dernier trait alors on le rajoute à la main
plt.plot([u[n-1], u[n-1]], [0, u[n]], 'k--')
# on rajoute des commentaires sur le graphe
plt.annotate('$u_0$', xy=(u[0], 0), xytext=(u[0]+.1, .1),
            arrowprops=dict(arrowstyle="->",
                            connectionstyle="arc3")
            )
plt.annotate('$u_1$', xy=(u[1], 0), xytext=(u[1]+.1, .1),
            arrowprops=dict(arrowstyle="->",
                            connectionstyle="arc3")
            )
# on met un titre, on peut taper en tex!
plt.title('Etude de $u_{n+1}=f(u_n)$')
# on affiche le dessin
plt.show()
# on importe tout d'abord la librairie de maths
# le "as np" permet d'appeler une fonction de numpy en écrivant np seulement
# par exemple np.sin est pour le sinus
import numpy as np

# on importe la librairie de dessin
import matplotlib.pyplot as plt

# on définit notre fonction f
def f(x):
    return np.cos(x)
# on définit la suite u, ce sera un "array", u[0]=1.4 pour le moment
u=[1.4]
# on définit le nombre de point de récurrence
n=10
# on calcule maintenant les n itérations de la suite avec une boucle
# attention range(0,n) va de 0 à n-1.

for i in range(0,n):
    # les boucles les if et le reste sont fait avec des retraits (un tab)
    # avec u.append, on ajoute à l'array u un nouvel élément.
    # au premier tour on a u[1] qui est donné par f(u[0])
    # plus généralement, la commande u[i] va bien donner le i-ème terme de la suite
    u.append(f(u[i]))
    # on imprime les termes au fur et à mesure. Le vert est du texte et le noir
    # est de la donnée
    print('u[',i,']=',u[i])

# on définit les points d'abcisses qui vont servir pour tracer les fonctions
# on va de 0 à pi/2 (le np.pi appelle pi qui est dans la librairie numpy)
# et 0.01 est le pas
x=np.arange(0,np.pi/2,0.01)
# on trace x-> f(x) en b pour blue et - pour le choix du trait
# puis on trace x->x en r pour red et - pour le choix du trait
# en changeant le pas on rend le tracer de la fonction plus ou moins linéraire par morceaux
plt.plot(x, f(x), 'b-', x, x, 'r-')

# Ici on fait des axes jolis
ax = plt.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 trace maintenant les traits noir k correspond à black
for i in range(0,n-1):
    plt.plot([u[i], u[i+1]], [u[i+1], u[i+1]], 'k-')
    plt.plot([u[i+1], u[i+1]], [u[i+1], u[i+2]], 'k-')
    # dans la ligne suivante, on trace une ligne entre
    # (u[i],0) et u[i, u[i+1]]. Les "x" sont tous dans le premier crochet
    # et les "y" dans le deuxième
    # on met -- pour avoir un trait en pointillé
    plt.plot([u[i], u[i]], [0, u[i+1]], 'k--')
# il manque le dernier trait alors on le rajoute à la main
plt.plot([u[n-1], u[n-1]], [0, u[n]], 'k--')

# on rajoute des commentaires sur le graphe
plt.annotate('$u_0$', xy=(u[0], 0), xytext=(u[0]+.1, .1),
            arrowprops=dict(arrowstyle="->",
                            connectionstyle="arc3")
            )
plt.annotate('$u_1$', xy=(u[1], 0), xytext=(u[1]+.1, .1),
            arrowprops=dict(arrowstyle="->",
                            connectionstyle="arc3")
            )
# on met un titre, on peut taper en tex! 
plt.title('Etude de $u_{n+1}=f(u_n)$')
# on affiche le dessin
plt.show()

Aucun commentaire:

Enregistrer un commentaire