{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "![En tête general](img/En_tete_general.png)\n", "\n", "\n", "*(C) Copyright Franck CHEVRIER 2019-2021 http://www.python-lycee.com/*\n", "\n", " Pour exécuter une saisie Python, sélectionner la cellule et valider avec SHIFT+Entrée.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Une Spirale infinie de longueur finie \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." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__On considère la suite de nombres complexes $(z_n)_{n \\geq 0}$ définie par :__\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__1. a. Déterminer les formes algébriques de $z_1$ ; $z_2$ et $z_3$.__
\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$.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "z0 = 16\n", "z0" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "z1 = z0 * (1+1j) /2\n", "z1" ] }, { "cell_type": "markdown", "metadata": {}, "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.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Utiliser ces zones de saisie pour les calculs des termes\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "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$.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Écrire ici la fonction Python z\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$\\quad\\;\\;\\;$__b. Effectuer des appels à la fonction z pour retrouver les valeurs de $z_1$ ; $z_2$ et $z_3$.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Utiliser ces zones de saisie pour les calculs des termes\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "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$.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", "def 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()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "graphique(z,10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "On souhaite maintenant étudier, pour $N \\geq 1$ la longueur de la ligne polygonale $\\color{darkviolet}{M_0M_1...M_N}$, notée $L_N$.
\n", "Ainsi, 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", "
" ] }, { "cell_type": "markdown", "metadata": {}, "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" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a = z(1)-z(0)\n", "a" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "abs(a)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$\\;\\;\\;$__b. Définir une fonction Python L qui reçoit en argument N et renvoie la longueur $L_N$.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Écrire ici la fonction Python L\n" ] }, { "cell_type": "markdown", "metadata": {}, "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" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Utiliser ces zones de saisie pour les calculs des termes\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "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" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from math import sqrt # import de la fonction sqrt\n", "\n", "# Effectuer ici une saisie pour une valeur approchée de la limite\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![Jean_Robert_Argand](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.
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*(C) Copyright Franck CHEVRIER 2019-2021 http://www.python-lycee.com/*\n" ] } ], "metadata": { "celltoolbar": "Raw Cell Format", "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.10" } }, "nbformat": 4, "nbformat_minor": 2 }