Ici je donne un code en Python 3 pour tracer le "colimaçon" donné par la suite
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...)
\[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
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