From d66d9f9a3b360abd594a43cbc5f39efcdfb1c7a4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20de=20Favereau?=
 <jerome.defavereau@uclouvain.be>
Date: Tue, 23 Nov 2021 13:32:44 +0000
Subject: [PATCH] Upload New File

---
 NM_3_exercice.ipynb | 339 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 339 insertions(+)
 create mode 100644 NM_3_exercice.ipynb

diff --git a/NM_3_exercice.ipynb b/NM_3_exercice.ipynb
new file mode 100644
index 0000000..5e48844
--- /dev/null
+++ b/NM_3_exercice.ipynb
@@ -0,0 +1,339 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "narrow-newspaper",
+   "metadata": {},
+   "source": [
+    "## Exercice : méthode de Romberg\n",
+    "\n",
+    "Estimation de \n",
+    "\n",
+    "$$\n",
+    "\\int_0^{\\frac{3\\pi}{4}} \\sin x\\ dx\n",
+    "$$\n",
+    "\n",
+    "Par la méthode de Romberg. Cette intégrale vaut $1 + 1/\\sqrt{2} \\approx 1.7071067811865475$"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 38,
+   "id": "accomplished-coordinator",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "R11=0.8330405509046936\n"
+     ]
+    }
+   ],
+   "source": [
+    "import numpy as np\n",
+    "import math\n",
+    "\n",
+    "def f(x):\n",
+    "    return np.sin(x)\n",
+    "\n",
+    "# méthode des trapèzes avec 2 points:\n",
+    "x_0 = 0\n",
+    "x_n = 3 * math.pi / 4\n",
+    "R11 = (f(x_0) + f(x_n))/2 * (x_n - x_0)\n",
+    "print(f\"{R11=}\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "annoying-access",
+   "metadata": {},
+   "source": [
+    "Calcul de R21 par la méthode itérative des trapèzes:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 46,
+   "id": "fewer-partition",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "R21=1.5049402075046334\n"
+     ]
+    }
+   ],
+   "source": [
+    "R21 = R11/2 + f(x_n/2) * (x_n - x_0)/2\n",
+    "print(f\"{R21=}\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "returning-mission",
+   "metadata": {},
+   "source": [
+    "calcul de R22 par Richardson avec $p=2$ puisque l'erreur est dominée par $h^2$:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 40,
+   "id": "liable-forestry",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "R22=1.7289067597046133\n"
+     ]
+    }
+   ],
+   "source": [
+    "R22 = (4*R21 - R11)/3\n",
+    "print(f\"{R22=}\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "streaming-tucson",
+   "metadata": {},
+   "source": [
+    "Calcul de R31 par la méthode itérative des trapèzes:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 42,
+   "id": "cathedral-investigation",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "R31=1.6574582026781939\n"
+     ]
+    }
+   ],
+   "source": [
+    "h = (x_n - x_0)/2 # espace entre les nouveaux points\n",
+    "x = x_0 + h/2 # position x du premier point\n",
+    "R31 = R21/2 + (f(x) + f(x+h)) * h/2\n",
+    "print(f\"{R31=}\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "sacred-pension",
+   "metadata": {},
+   "source": [
+    "calcul de R32 par Richardson avec $p=2$ puisque l'erreur sur R21 et R31 est dominée par $h^2$:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 43,
+   "id": "compliant-zimbabwe",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "R32=1.708297534402714\n"
+     ]
+    }
+   ],
+   "source": [
+    "R32 = (4*R31 - R21)/3\n",
+    "print(f\"{R32=}\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "elect-desktop",
+   "metadata": {},
+   "source": [
+    "calcul de R33 par Richardson avec $p=4$ puisque l'erreur sur R22 et R32 est dominée par $h^4$:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 44,
+   "id": "floppy-alignment",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "R33=1.706923586049254\n"
+     ]
+    }
+   ],
+   "source": [
+    "R33 = (16*R32 - R22)/15\n",
+    "print(f\"{R33=}\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "surgical-syndrome",
+   "metadata": {},
+   "source": [
+    "Même chose en utilisant les fonctions définies au cours:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 45,
+   "id": "green-league",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "R11=0.8330405509046936\n",
+      "R21=1.5049402075046334\n",
+      "R22=1.7289067597046133\n",
+      "R31=1.6574582026781939\n",
+      "R32=1.708297534402714\n",
+      "R33=1.706923586049254\n",
+      "R41=1.6947487165588795\n",
+      "R42=1.7071788878524412\n",
+      "R43=1.7071043114157562\n",
+      "R44=1.7071071800723674\n",
+      "\n",
+      "En utilisant la formule analytique:\n",
+      "INT=1.7071067811865475\n"
+     ]
+    }
+   ],
+   "source": [
+    "import matplotlib.pyplot as plt\n",
+    "import numpy as np\n",
+    "from math import sin, pi, sqrt\n",
+    "def trapezes_rec(f, x_0, x_n, i_old, k):\n",
+    "    if k == 1: \n",
+    "        return (f(x_0) + f(x_n))*(x_n - x_0)/2\n",
+    "    else:\n",
+    "        n = 2**(k-2)\n",
+    "        h = (x_n - x_0)/n\n",
+    "        x = x_0 + h/2\n",
+    "        sum = 0\n",
+    "        for i in range(n):\n",
+    "            sum += f(x)\n",
+    "            x += h\n",
+    "        return i_old/2 + h*sum/2\n",
+    "\n",
+    "    \n",
+    "def richardson(i_1, i_2, k):\n",
+    "    fact = 2**k\n",
+    "    return (fact*i_2 - i_1)/(fact - 1)\n",
+    "\n",
+    "# ligne 1\n",
+    "R11 = trapezes_rec(np.sin, 0, 3*pi/4, 0, 1)\n",
+    "print(f\"{R11=}\")\n",
+    "\n",
+    "# ligne 2\n",
+    "R21 = trapezes_rec(np.sin, 0, 3*pi/4, R11, 2)\n",
+    "print(f\"{R21=}\")\n",
+    "R22 = richardson(R11, R21, 2)\n",
+    "print(f\"{R22=}\")\n",
+    "\n",
+    "# ligne 3\n",
+    "R31 = trapezes_rec(np.sin, 0, 3*pi/4, R21, 3)\n",
+    "print(f\"{R31=}\")\n",
+    "R32 = richardson(R21, R31, 2)\n",
+    "print(f\"{R32=}\")\n",
+    "R33 = richardson(R22, R32, 4)\n",
+    "print(f\"{R33=}\")\n",
+    "\n",
+    "# ligne 4\n",
+    "R41 = trapezes_rec(np.sin, 0, 3*pi/4, R31, 4)\n",
+    "print(f\"{R41=}\")\n",
+    "R42 = richardson(R31, R41, 2)\n",
+    "print(f\"{R42=}\")\n",
+    "R43 = richardson(R32, R42, 4)\n",
+    "print(f\"{R43=}\")\n",
+    "R44 = richardson(R33, R43, 6)\n",
+    "print(f\"{R44=}\")\n",
+    "\n",
+    "print(\"\\nEn utilisant la formule analytique:\")\n",
+    "print('INT={}'.format(1+1/math.sqrt(2)))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "leading-montana",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "printable-neutral",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "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.8.10"
+  },
+  "varInspector": {
+   "cols": {
+    "lenName": 16,
+    "lenType": 16,
+    "lenVar": 40
+   },
+   "kernels_config": {
+    "python": {
+     "delete_cmd_postfix": "",
+     "delete_cmd_prefix": "del ",
+     "library": "var_list.py",
+     "varRefreshCmd": "print(var_dic_list())"
+    },
+    "r": {
+     "delete_cmd_postfix": ") ",
+     "delete_cmd_prefix": "rm(",
+     "library": "var_list.r",
+     "varRefreshCmd": "cat(var_dic_list()) "
+    }
+   },
+   "types_to_exclude": [
+    "module",
+    "function",
+    "builtin_function_or_method",
+    "instance",
+    "_Feature"
+   ],
+   "window_display": false
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
-- 
GitLab