diff --git a/zeros/point_fixe.ipynb b/zeros/point_fixe.ipynb index 08054e7866c83ae168cc409e58b15a6b029cff44..69f4b62311d5a780a9738009bb20f176827e504b 100644 --- a/zeros/point_fixe.ipynb +++ b/zeros/point_fixe.ipynb @@ -7,19 +7,11 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "metadata": { "trusted": true }, - "outputs": [ - { - "data": { - "application/javascript": "element.append(window._basthonBypassBus.pop(0));" - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": "import numpy as np\nimport matplotlib.pyplot as plt\n\na, b = -6, 6 # l'intervalle sur lequel on trace le graphique\n\ndef f(x):\n return x**2+2*x-6\n\nX = np.linspace(a, b, 100)\nY = [f(x) for x in X]\n\nfig, ax = plt.subplots()\n\nplt.plot(X, Y)\nplt.plot(X, X)\nplt.xlim(a, b)\nplt.ylim(-8, 5)\n\nax.axhline(linewidth=2, color=\"k\")\nax.axvline(linewidth=2, color=\"k\")\n\nplt.xticks(np.arange(a, b, step=1))\nplt.yticks(np.arange(-8, 5, step=1))\n\nplt.grid(True)\n\nplt.title(\"$h:x\\mapsto x^2+2x-6$\")\n\nplt.show()" }, { @@ -34,19 +26,11 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": null, "metadata": { - "trusted": false + "trusted": true }, - "outputs": [ - { - "data": { - "application/javascript": "element.append(window._basthonBypassBus.pop(0));" - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": "from matplotlib import pyplot as plt\n\n\ndef plot_point_fixe(f, x0, a, b, n =10):\n '''\n Permet d'afficher un graphique qui montre l'évolution des points\n par la méthode du point fixe ou x_{n+1} := f(x_{n}) sur \n l'intervalle [a,b]\n Args:\n - f (function) : la fonction pour laquelle on cherche un point fixe\n - x0 (float) : le point de départ\n - a (float) : le debut de l'intervalle sur lequel on affiche la fonction\n - a (float) : la fin de l'intervalle sur lequel on affiche la fonction\n - n (int) : le nombre d'itérations de la méthode du point fixe (par\n défaut n vaut 100)\n '''\n X = np.linspace(a, b, 100) # 100 points entre a et b\n Y = [f(x) for x in X]\n \n fig, ax = plt.subplots()\n \n # calcul les coordonnées des points pour la méthode du point fixe\n xs = [x0]\n ys = [0]\n for i in range(1,2*n+1):\n if i % 2 == 0:\n xs.append(ys[-1])\n ys.append(ys[-1])\n else:\n xs.append(xs[-1])\n ys.append(f(xs[-1]))\n ax.plot(xs, ys, 'k--', lw=2.0)\n\n \n ax.plot(X, X, '0.4', lw=2.0, ) # affiche la droite y=x\n ax.plot(X, Y, 'r', lw=2.0) # affiche y=f(x\n \n ax.set_xlabel('$x$')\n ax.set_ylabel('$f(x)$')\n \n ax.axhline(linewidth=2, color=\"k\")\n ax.axvline(linewidth=2, color=\"k\")\n\n plt.xlim(a, b)\n \n plt.grid()\n plt.show()\n\n\ndef g(x):\n return 8*x/(1 + 2*x)\n \nplot_point_fixe(g, 0.5, 0, 4)" }, { @@ -56,20 +40,12 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": { "scrolled": true, - "trusted": false + "trusted": true }, - "outputs": [ - { - "data": { - "application/javascript": "element.append(window._basthonBypassBus.pop(0));" - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": "from math import log\n\ndef g(x):\n return log(x)+1\n\nplot_point_fixe(g, 4, 0.1, 4.2)" }, { @@ -79,20 +55,12 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": { "scrolled": true, - "trusted": false + "trusted": true }, - "outputs": [ - { - "data": { - "application/javascript": "element.append(window._basthonBypassBus.pop(0));" - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": "def g(x):\n return -8*x/(1 + 2*x+1)\n \nplot_point_fixe(g, -3, -8, -2)" }, { @@ -102,19 +70,11 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": null, "metadata": { - "trusted": false + "trusted": true }, - "outputs": [ - { - "data": { - "application/javascript": "element.append(window._basthonBypassBus.pop(0));" - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": "def g(x):\n return x**2+2*x-6\n \nplot_point_fixe(g, 2.1, -4, 8,3)" }, { @@ -124,19 +84,11 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": null, "metadata": { - "trusted": false + "trusted": true }, - "outputs": [ - { - "data": { - "application/javascript": "element.append(window._basthonBypassBus.pop(0));" - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": "def g(x):\n return x**2+2*x-6\n \nplot_point_fixe(g, -4, -5, 3,3)" }, { @@ -148,19 +100,11 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "metadata": { "trusted": true }, - "outputs": [ - { - "data": { - "application/javascript": "element.append(window._basthonBypassBus.pop(0));" - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": "import numpy as np\nimport matplotlib.pyplot as plt\nfrom math import exp\n\ndef h(x):\n return exp(x)-x-3\n\ndef dh(x):\n return exp(x)-1\n\na, b = -6, 6 # l'intervalle sur lequel on trace le graphique\n\nX = np.linspace(a, b, 100)\nY = [h(x) for x in X]\nDY = [dh(x) for x in X]\n\nfig, ax = plt.subplots()\n\nplt.plot(X, Y, label=\"y=h(x)\")\nplt.plot(X, X)\nplt.plot(X, DY, label=\"y=h'(x)\")\nplt.xlim(a, b)\nplt.ylim(-8, 5)\n\nax.axhline(linewidth=2, color=\"k\")\nax.axvline(linewidth=2, color=\"k\")\n\nplt.xticks(np.arange(a, b, step=1))\nplt.yticks(np.arange(-8, 5, step=1))\n\nplt.grid(True)\n\nplt.legend(loc=\"lower right\")\n\nplt.title(\"$h:x\\mapsto e^x-x-3$\")\n\nplt.show()" }, { @@ -170,20 +114,12 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "metadata": { "scrolled": true, "trusted": true }, - "outputs": [ - { - "data": { - "application/javascript": "element.append(window._basthonBypassBus.pop(0));" - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": "import numpy as np\nimport matplotlib.pyplot as plt\nfrom math import log\n\ndef h(x):\n return log(2*x+3)\n\ndef dh(x):\n return 1/(2*x+3)\n\na, b = -1.49, 6 # l'intervalle sur lequel on trace le graphique\n\nX = np.linspace(a, b, 100)\nY = [h(x) for x in X]\nDY = [dh(x) for x in X]\n\nfig, ax = plt.subplots()\n\nplt.plot(X, Y, label=\"y=h(x)\")\nplt.plot(X, X)\nplt.plot(X, DY, label=\"y=h'(x)\")\nplt.xlim(a, b)\nplt.ylim(-8, 5)\n\nax.axhline(linewidth=2, color=\"k\")\nax.axvline(linewidth=2, color=\"k\")\n\nplt.xticks(np.arange(a, b, step=1))\nplt.yticks(np.arange(-8, 5, step=1))\n\nplt.grid(True)\n\nplt.legend(loc=\"lower right\")\n\nplt.title(\"$h:x\\mapsto \\log(2x+3)$\")\n\nplt.show()" }, { @@ -193,17 +129,11 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "metadata": { "trusted": true }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": "il y a deux solution à l'équation ex eˣ -2x-3=0 \nune première solution en x = -1.373799270699159\nune seconde solution en x = 1.923729843806448\n" - } - ], + "outputs": [], "source": "def point_fixe(h, x0, tol=0.001, iter_max=100):\n '''\n Cherche un point fixe x de la fonction h (i.e. un solution de h(x)=x)e\n n utilisant la méthode itérative du point fixe\n Args:\n - f (function) : la fonction pour laquelle on cherche le point\n fixe.\n - x0 (float) : la valeur de démarrage de la méthode.\n - tol (float) : l'erreur minimal à partir de laquelle on\n arrête la recherche (|x_n-x_{n+1}|<tol).\n Par défaut tol = 0.001\n - iter_max(int): Le nombre d'itérations maximal dans le cas où \n la méthode diverge ou converge trop lentement\n \n return:\n - x1(float) : une approximation du point fixe qui se trouve à\n distance tol de la solution ou le iter_max termes\n si la méthode diverge.\n \n '''\n x1 = x0\n for _ in range(iter_max):\n x0 = x1\n x1 = h(x0)\n \n # print(x1)\n \n # on stop la recherche si on est suffisament proche de la solution\n if abs(x0-x1) < tol:\n return x1\n\n return x1\n\nprint(\"il y a deux solution à l'équation ex eˣ -2x-3=0 \")\n\n\n# première solution avec h\ndef h(x):\n return exp(x)-x-3\n\nprint(\"une première solution en x = \",point_fixe(h, -1))\n\n# Deusième solution avec ĥ\ndef h(x):\n return log(2*x+3)\n\nprint(\"une seconde solution en x = \",point_fixe(h, 1))" }, { @@ -218,7 +148,7 @@ "trusted": true }, "outputs": [], - "source": "# Afficher la fonction d'intérêt pour estimer la localisation \n# du point fixe \n" + "source": "# Afficher la fonction d'intérêt pour estimer la localisation \n# du/des point(s) fixe(s)\n\n" }, { "cell_type": "code", @@ -227,7 +157,7 @@ "trusted": true }, "outputs": [], - "source": "# Trouver le point fixe\n" + "source": "# Trouver le(s) point(s) fixe(s)\n" }, { "cell_type": "raw", @@ -243,7 +173,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "trusted": false + "trusted": true }, "outputs": [], "source": "" @@ -256,7 +186,30 @@ { "cell_type": "markdown", "metadata": {}, - "source": "### Exercice 90\n\nUn nageur se trouve à une distance de $0,57$ kilomètres du rivage et aimerait rejoindre sa cabane.\n \nIl est positionné tel que le point $A$ est sa projection orthogonale sur le rivage et la distance séparant le point $A$ de la cabane est de $2,8\\; km$.\n\n\nLe nageur peut nager a une vitesse de $3\\;km/h$ et marcher sur le rivage à une vitesse de $5km/h$.\n\n\n\nOn souhaite déterminer à quelle distance de la cabane doit se trouver le point $P$, correspondant à l'endroit où le nageur doit sortir de l'eau, pour rejoindre la cabane en un minimum de temps." + "source": "### Exercice 90\n\nEstimer, avec une précision de 6 chiffres après la virgule toutes les solutions de l'équation \n\n$$ x^3 = \\sqrt{x+2} .$$" + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": "# Estimer graphiquement où se situe les solutions\n" + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": "# Définir une (ou plusieurs) fonction(s) h et utiliser la méthode\n# du point fixe pour trouver les solutions de l'équation.\n" + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "### Exercice 91\n\nUn nageur se trouve à une distance de $0,57$ kilomètres du rivage et aimerait rejoindre sa cabane.\n \nIl est positionné tel que le point $A$ est sa projection orthogonale sur le rivage et la distance séparant le point $A$ de la cabane est de $2,8\\; km$.\n\n\nLe nageur peut nager a une vitesse de $3\\;km/h$ et marcher sur le rivage à une vitesse de $5km/h$.\n\n\n\nOn souhaite déterminer à quelle distance de la cabane doit se trouver le point $P$, correspondant à l'endroit où le nageur doit sortir de l'eau, pour rejoindre la cabane en un minimum de temps." }, { "cell_type": "code", @@ -265,7 +218,7 @@ "trusted": true }, "outputs": [], - "source": "# Afficher la fonction d'intérêt pour estimer la localisation \n# du point fixe \n\n" + "source": "# Afficher la fonction d'intérêt pour estimer la localisation \n# du/des point(s) fixe(s)\n\n" }, { "cell_type": "code", @@ -274,7 +227,7 @@ "trusted": true }, "outputs": [], - "source": "# Trouver le point fixe\n\n" + "source": "# Trouver le(s) point(s) fixe(s)\n\n" }, { "cell_type": "raw",