{"cells":[{"metadata":{},"cell_type":"markdown","source":"![En tête general](https://raw.githubusercontent.com/PythonLycee/PyLyc/master/img/En_tete_general.png)\n\n\n© Copyright Franck CHEVRIER 2019-2022 https://www.python-lycee.com.
\nLes activités partagées sur Capytale sont sous licence Creative Commons.\n\n Pour exécuter une saisie Python, sélectionner la cellule et valider avec SHIFT+Entrée.\n"},{"metadata":{},"cell_type":"markdown","source":"# Une Spirale infinie de longueur finie (Corrigé)\n#### Étude d'une suite de nombres complexes\n\n__Note :__ Cette activité ne nécessite pas la connaissance de l'écriture exponentielle d'un nombre complexe. Elle est inspirée d'un exercice du Bac S 2014 Centres Étrangers."},{"metadata":{},"cell_type":"markdown","source":"__On considère la suite de nombres complexes $(z_n)_{n \\geq 0}$ définie par :__\n"},{"metadata":{},"cell_type":"markdown","source":"__1. a. Déterminer les formes algébriques de $z_1$ ; $z_2$ et $z_3$.__
\n\n\n\n$\\;\\;\\;$__b. Le nombre complexe $i$ se code 1j en Python. Exécuter les deux cellules suivantes, qui permettent de définir $z_0$ et de calculer $z_1$.__"},{"metadata":{"trusted":false},"cell_type":"code","source":"z0 = 16\nz0","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"z1 = z0 * (1+1j) /2\nz1","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"$\\;\\;\\;$__c. Effectuer des saisies pour calculer $z_2$ et $z_3$, et vérifier la cohérence avec les résultats de la question 1.a.__"},{"metadata":{"trusted":false},"cell_type":"code","source":"# Utiliser ces zones de saisie pour les calculs des termes\nz2 = z1 * (1+1j) /2\nz2","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"z3 = z2 * (1+1j) /2\nz3","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"__2. a. On souhaite maintenant automatiser le calcul des termes de la suite $(z_n)_{n \\geq 0}$.__
\n$\\quad\\;\\;\\;$__Définir une fonction Python z qui reçoit en argument n et renvoie le nombre complexe $z_n$.__"},{"metadata":{"trusted":false},"cell_type":"code","source":"# Écrire ici la fonction Python z\ndef z(n):\n \"\"\"\n Fonction qui calcule le terme de rang n de la suite (zn)\n \"\"\"\n m = 16\n q = (1+1j)/2\n for k in range(n):\n m = m * q\n return m","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"$\\quad\\;\\;\\;$__b. Effectuer des appels à la fonction z pour retrouver les valeurs de $z_1$ ; $z_2$ et $z_3$.__"},{"metadata":{"trusted":false},"cell_type":"code","source":"# Utiliser ces zones de saisie pour les calculs des termes\nz(1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"z(2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"z(3)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"__3. La fonction Python graphique donnée ci-dessous permet d'obtenir une représentation graphique du plan complexe où apparaissent :__\n\n\n__Exécuter les deux cellules pour obtenir cette représentation graphique pour $N=10$.__"},{"metadata":{"trusted":false},"cell_type":"code","source":"import matplotlib.pyplot as plt\n\ndef graphique(z,N):\n \"\"\"\n Fonction qui affiche les points d'affixes z(n) pour n de 0 jusqu'à N\n et des segments qui les joignent\n où z est une fonction Python correspondant à une suite de complexes\n \"\"\" \n # initialisation du graphique\n plt.figure()\n \n # création de la liste des abscisses et de la liste des ordonnées\n Lx = [z(n).real for n in range(N+1)]\n Ly = [z(n).imag for n in range(N+1)]\n \n # création des noms des points\n Lname = ['$M_{'+str(n)+'}$' for n in range(N+1) ]\n \n #paramétrage de la fenêtre d'affichage \n xmin = int(min(Lx+[-1])) ; xmax = int(max(Lx+[1]))+1\n ymin = int(min(Ly+[-1])) ; ymax = int(max(Ly+[1]))+1\n \n # réglage du repère orthonormé avec graduations\n plt.figure(num=0, figsize=(12,8), dpi=80) ; \n plt.axis([xmin-0.5,xmax+0.5,ymin-0.5,ymax+0.5])\n plt.xticks( [ k for k in range(xmin-1,xmax+1) ] )\n plt.yticks( [ k for k in range(ymin-1,ymax+1) ] ) \n ax = plt.gca()\n ax.spines['right'].set_color('none') \n ax.spines['top'].set_color('none')\n ax.xaxis.set_ticks_position('bottom') ; ax.spines['bottom'].set_position(('data',0))\n ax.yaxis.set_ticks_position('left') ; ax.spines['left'].set_position(('data',0))\n ax.set_aspect('equal') \n # représentation des points avec leurs noms et des segments qui les joignent\n plt.plot(Lx,Ly,color='orchid')\n plt.scatter(Lx,Ly,color='darkviolet') \n for n in range(N+1):\n plt.text(Lx[n]+0.3,Ly[n]+0.3,Lname[n],horizontalalignment='center',verticalalignment='center', fontsize=10, color='darkviolet')\n\n # affichage\n plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"graphique(z,10)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"
\nOn souhaite maintenant étudier, pour $N \\geq 1$ la longueur de la ligne polygonale $\\color{darkviolet}{M_0M_1...M_N}$, notée $L_N$.
\nAinsi, on a :\n$$L_N = \\sum\\limits_{n=0}^{N-1}{M_nM_{n+1}}=M_0M_1+M_1M_2+...+M_{N-1}M_N$$\n
"},{"metadata":{},"cell_type":"markdown","source":"__4. Étude algorithmique.__

\n$\\;\\;\\;$__a. La fonction Python abs permet de calculer le module d'un nombre complexe.__
\n$\\quad\\;\\;$__Exécuter les deux cellules suivantes. Que permettent-elles de calculer ?__\n

La première cellule permet de calculer l'affixe du vecteur $\\overrightarrow{M_0M_1}$, et la deuxième cellule permet de calculer la longueur $M_0M_1$."},{"metadata":{"trusted":false},"cell_type":"code","source":"a = z(1)-z(0)\na","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"abs(a)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"$\\;\\;\\;$__b. Définir une fonction Python L qui reçoit en argument N et renvoie la longueur $L_N$.__"},{"metadata":{"trusted":false},"cell_type":"code","source":"# Écrire ici la fonction Python L\ndef L(N):\n \"\"\"\n Fonction qui calcule la longueur de la ligne polygonale jusqu'au point de rang N\n \"\"\"\n S = 0\n for n in range(N):\n S = S + abs(z(n+1)-z(n))\n return S\n ","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"$\\;\\;\\;$__c. À l'aide de la fonction Python L, effectuer des saisies pour calculer $L_{10}$, $L_{100}$ puis $L_{1000}$.__
\n$\\quad\\;\\;$__Que peut-on conjecturer concernant $L_N$ lorsque $N$ tend vers $+\\infty$ ?__\n

Il semble que la suite $(L_N)$ admette une limite finie."},{"metadata":{"trusted":false},"cell_type":"code","source":"# Utiliser ces zones de saisie pour les calculs des termes\nL(10)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"L(100)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"L(1000)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"__5. Étude mathématique.__

\n$\\;\\;\\;$__Pour tout $n \\geq 0$, on pose $r_n = \\lvert z_n \\rvert$.__

\n$\\;\\;\\;$__a. Démontrer que pour tout $n \\geq 0$ ; $\\displaystyle r_{n+1}=\\frac{\\sqrt{2}}{2}r_n$. En déduire la nature de la suite $(r_n)_{n \\geq 0}$.__

\n$\\;\\;\\;$__b. Démontrer que pour tout $n \\geq 0$ ; $M_nM_{n+1}=r_{n+1}$.__

\n$\\;\\;\\;$__c. En déduire une expression de $L_N = \\displaystyle\\sum\\limits_{n=0}^{N-1}{M_nM_{n+1}}$ en fonction de $N$.__

\n$\\;\\;\\;$__d. Déterminer $\\lim\\limits_{N \\to +\\infty}{L_N}$ pour retrouver le résultat conjecturé à la question 4.c.__

\n$\\quad\\;\\;$__À l'aide d'une saisie Python, obtenir une valeur approchée de cette limite.__
\n$\\quad\\;\\;$Aide : La fonction Python sqrt, importée du module math, permet de calculer la racine carrée d'un nombre.
\n$\\quad\\;\\;$__Comparer avec la valeur de $L_{1000}$.__\n\n\n \na. $r_{n+1}=\\lvert z_{n+1} \\rvert = \\displaystyle\\left\\lvert \\frac{1+i}{2} z_n \\right\\rvert = \\displaystyle\\left\\lvert \\frac{1+i}{2} \\right\\rvert \\times \\lvert z_n \\rvert = \\frac{\\lvert 1+i \\rvert}{2} r_n = \\frac{\\sqrt{2}}{2} r_n$.
$\\;\\;\\;(r_n)$ est donc la suite géométrique de premier terme $r_0=\\lvert z_0 \\rvert=16$ et de raison $\\displaystyle\\frac{\\sqrt{2}}{2}$.

\nb. $M_nM_{n+1}=\\lvert z_{n+1}-z_n \\rvert = \\displaystyle\\left\\lvert \\frac{1+i}{2}z_n-z_n \\right\\rvert = \\displaystyle\\left\\lvert \\left( \\frac{1+i}{2}-1 \\right) z_n \\right\\rvert = \\displaystyle\\left\\lvert \\frac{-1+i}{2} z_n \\right\\rvert = \\displaystyle\\left\\lvert \\frac{-1+i}{2} \\right\\rvert \\times \\lvert z_n \\rvert = \\frac{\\sqrt{2}}{2}r_n = r_{n+1} $\n

\nc. $L_N =\\displaystyle \\sum\\limits_{n=0}^{N-1}{M_nM_{n+1}} = \\sum\\limits_{n=0}^{N-1}{r_{n+1}} = \\sum\\limits_{n=0}^{N-1}{r_0 \\times \\left( \\frac{\\sqrt{2}}{2} \\right)^{n+1} } = r_0 \\frac{\\sqrt{2}}{2} \\sum\\limits_{n=0}^{N-1}{ \\left( \\frac{\\sqrt{2}}{2} \\right)^n } = 8 \\sqrt{2} \\times \\frac{1-\\left( \\frac{\\sqrt{2}}{2} \\right) ^N}{1-\\frac{\\sqrt{2}}{2}} = \\frac{16\\sqrt{2}}{2-\\sqrt{2}} \\times \\left( 1-\\left( \\frac{\\sqrt{2}}{2} \\right) ^N \\right)$\n

\nd. $\\displaystyle\\lim\\limits_{N \\to +\\infty}{\\left( \\frac{\\sqrt{2}}{2} \\right) ^N}=0$
\n$\\;\\;\\;$donc $\\displaystyle\\lim\\limits_{N \\to +\\infty}{L_N} = \\frac{16\\sqrt{2}}{2-\\sqrt{2}} = \\frac{16\\sqrt{2}\\left(2+\\sqrt{2}\\right)}{\\left(2-\\sqrt{2}\\right)\\left(2+\\sqrt{2}\\right)} = \\frac{16\\left(2\\sqrt{2}+2\\right)}{2} = 16 \\left(1+\\sqrt{2}\\right)$\n\n\n\n\n\n\n
"},{"metadata":{"trusted":false},"cell_type":"code","source":"from math import sqrt # import de la fonction sqrt\n\n# Effectuer ici une saisie pour une valeur approchée de la limite\n16*(1+sqrt(2))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"![Jean_Robert_Argand](https://raw.githubusercontent.com/PythonLycee/PyLyc/master/img/Jean_Robert_Argand.jpg)\n\n
Jean Robert Argand (1768-1822) a présenté en 1806 une méthode de représentation géométrique des nombres complexes dans le plan.
"},{"metadata":{},"cell_type":"markdown","source":"© Copyright Franck CHEVRIER 2019-2022 https://www.python-lycee.com.
\nLes activités partagées sur Capytale sont sous licence Creative Commons.\n

\nDernière modification de l'activité : Juillet 2022"}],"metadata":{"celltoolbar":"Raw Cell Format","kernelspec":{"display_name":"Python 3","language":"python","name":"python3"}},"nbformat":4,"nbformat_minor":2}