{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# 1A.1 - Int\u00e9grale et la m\u00e9thode des rectangles - correction\n", "\n", "Approximation du calcul d'une int\u00e9grale par la m\u00e9thode des rectangles."]}, {"cell_type": "code", "execution_count": 1, "metadata": {"collapsed": true}, "outputs": [], "source": ["%matplotlib inline"]}, {"cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [{"data": {"text/html": ["
run previous cell, wait for 2 seconds
\n", ""], "text/plain": [""]}, "execution_count": 3, "metadata": {}, "output_type": "execute_result"}], "source": ["from jyquickhelper import add_notebook_menu\n", "add_notebook_menu()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Calcul de l'int\u00e9grale"]}, {"cell_type": "code", "execution_count": 3, "metadata": {"collapsed": true}, "outputs": [], "source": ["a = -2\n", "b = 3\n", "n = 20"]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [{"data": {"text/plain": ["-2.6145744834544478"]}, "execution_count": 5, "metadata": {}, "output_type": "execute_result"}], "source": ["import math\n", "f = lambda x: x * math.cos (x)\n", "f(4)"]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [{"data": {"text/plain": ["0.55"]}, "execution_count": 6, "metadata": {}, "output_type": "execute_result"}], "source": ["def integrale(f, a, b, n):\n", " somme = 0\n", " h = float(b-a) / n\n", " x = a\n", " for i in range(0, n + 1):\n", " somme += f(x) * h\n", " x += h\n", " return somme\n", "\n", "# On v\u00e9rifie ave un cas simple.\n", "integrale(lambda x: x, 0, 1, 10)"]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [{"data": {"text/plain": ["-2.2320146802585272"]}, "execution_count": 7, "metadata": {}, "output_type": "execute_result"}], "source": ["integrale(f, a, b, n)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Il faut \u00e9crire la fonction qui calcule l'int\u00e9grale."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Calcul de pr\u00e9cision\n", "\n", "On essaye toutes les valeurs de $n$ jusqu'\u00e0 obtenir la pr\u00e9cision souhait\u00e9e en supposant qu'elle est obtenue \u00e0 partir du moment o\u00f9 la diff\u00e9rence relative entre deux valeurs successives est inf\u00e9rieure \u00e0 la pr\u00e9cision."]}, {"cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [{"data": {"text/plain": ["(0.5050000000000003, 100)"]}, "execution_count": 8, "metadata": {}, "output_type": "execute_result"}], "source": ["def integrale_precise(f, a, b, n0, precision):\n", " val = integrale(f, a, b, n0)\n", " val0 = None\n", " while val0 is None or abs(val - val0) / val0 > precision:\n", " val0 = val\n", " n0 += 1\n", " val = integrale(f, a, b, n0)\n", " return val, n0\n", "\n", "integrale_precise(lambda x: x, 0, 1, 10, 1e-4)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Le deuxi\u00e8me nombre indique que la valeur de $n$ n\u00e9cessaire."]}, {"cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [{"data": {"text/plain": ["(-2.2196877891927724, 21)"]}, "execution_count": 9, "metadata": {}, "output_type": "execute_result"}], "source": ["integrale_precise(f, a, b, n, 1e-4)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Calcul plus rapide\n", "\n", "Imaginez un piano. A l'it\u00e9ration $n$, on calcule les touches blanches, \u00e0 l'it\u00e9ration $n+1$, les touches noires. A l'it\u00e9ration $n$, on calcule les $k$ rectangles de hauteur rouges, puis les $k$ verts \u00e0 $n+1$ puis les $2k$ \u00e0 $n+2$."]}, {"cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [{"data": {"image/png": "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\nRK5CYII=\n", "text/plain": [""]}, "execution_count": 10, "metadata": {"image/png": {"width": 400}}, "output_type": "execute_result"}], "source": ["from pyquickhelper.helpgen import NbImage\n", "NbImage(\"images/int2.png\", width=400)"]}, {"cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [{"data": {"text/plain": ["(0.5000454610560389, 81920)"]}, "execution_count": 11, "metadata": {}, "output_type": "execute_result"}], "source": ["def integrale_precise_2n(f, a, b, n0, precision):\n", " val = integrale(f, a, b, n0) \n", " val0 = None\n", " h = float(b-a) / n0\n", " while val0 is None or abs(val - val0) / val0 > precision:\n", " val0 = val\n", " n0 *= 2\n", " h /= 2\n", " val = (val + integrale(f, a + h, b, n0)) / 2\n", " return val, n0\n", "\n", "integrale_precise_2n(lambda x: x, 0, 1, 10, 1e-4)"]}, {"cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [{"data": {"text/plain": ["(-2.2169740198498182, 40)"]}, "execution_count": 12, "metadata": {}, "output_type": "execute_result"}], "source": ["integrale_precise_2n(f, a, b, n, 1e-4)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Qu'est-ce qui explique les diff\u00e9rences en pr\u00e9cision ? Dans le cas de cette int\u00e9grale, on veut calculer $\\int_0^1 xdx$. A l'it\u00e9ration $n$, on a : \n", "\n", "$$I(n)=\\frac{i}{n}\\sum_{i=1}^n \\frac{i}{n} = \\frac{n(n+1)}{2n^2} = \\frac{n+1}{2n} = \\frac{1}{2} + \\frac{1}{2n}$$\n", "\n", "On en d\u00e9duit que $I(n+1) - I(n) = \\frac{1}{2n+2} - \\frac{1}{2n} \\sim O(\\frac{1}{n^2})$. Autrement dit, l'algorithme s'arr\u00eate d\u00e8s que $\\frac{1}{n^2} < precision$ mais la somme des diff\u00e9rences qui resteraient \u00e0 calculer si on continuait n'est pas n\u00e9gligeable : \n", "\n", "$$\\sum_{i>k} I(n+1) - I(n) \\sim \\frac{1}{k}$$\n", "\n", "Pour cette int\u00e9grale, l'algorithme s'arr\u00eate alors que le chemin restant \u00e0 parcourir est aussi grand que la diff\u00e9rence entre deux valeurs successives."]}, {"cell_type": "markdown", "metadata": {}, "source": ["La seconde version multiplie le nombre de calculs par deux \u00e0 chaque fois m\u00eame si elle \u00e9vite de recalculer les m\u00eames valeurs. Une fois qu'on a commenc\u00e9 une s\u00e9rie, il faut aller jusqu'au bout. C'est int\u00e9ressant si la fonction \u00e0 int\u00e9grer est longue \u00e0 calculer. \n", "\n", "L'int\u00e9grale converge pour toute fonction r\u00e9gl\u00e9e ou si l'ensemble de ses discontinuit\u00e9 est un ensemble de mesure nulle. On peut obtenir une autre propri\u00e9t\u00e9 si on suppose que la fonction est $C^1$ (la d\u00e9riv\u00e9e est continue). La d\u00e9riv\u00e9e admet un majorant et on s'en sert pour majorer la marge d'erreur."]}, {"cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": [""]}, "execution_count": 13, "metadata": {"image/png": {"width": 400}}, "output_type": "execute_result"}], "source": ["NbImage(\"images/marge.png\", width=400)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Chaque petit rectangle est de taille $h=\\frac{b-a}{n}$ et de hauteur maximal $M'h$ o\u00f9 $M'$ est un majorant de la d\u00e9riv\u00e9e. $M'=\\underset{x \\in [a,b]}{sup} \\left|f'(x)\\right|$. La marge d'incertitude v\u00e9rifie :\n", "\n", "$$m(h) \\leqslant nM'h^2 = \\frac{M'(b-a)^2}{n}$$"]}, {"cell_type": "markdown", "metadata": {}, "source": ["C'est une suite d\u00e9croissante et pour obtenir une pr\u00e9cision $p$, il suffit de choisir $n$ tel que :\n", "\n", "$$n > \\frac{M'(b-a)^2}{p}$$"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Il faut maintenant estimer un majorant pour la d\u00e9riv\u00e9e. Comme on calcule la fonction pour un ensemble de points pris dans l'interval $x_i=(b-a)\\frac{i}{n} + a \\in [a,b]$, On peut le faire en calculant :\n", "\n", "$$M' \\sim \\max_i\\left\\{ \\frac{\\left|f(x_{i+1}) - f(x_i)\\right|}{x_{i+1} - x_i}\\right\\}$$\n", "\n", "Si $f(x)=x^2$, $a=0$, $b=1$, $n = \\frac{1}{p}$."]}, {"cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [{"data": {"text/plain": ["(0.5004995004994989, 1001)"]}, "execution_count": 14, "metadata": {}, "output_type": "execute_result"}], "source": ["def integrale_precision(f, a, b, n):\n", " somme = 0\n", " h = float(b-a) / n\n", " x = a\n", " max_fp = 0\n", " last_f = 0\n", " for i in range(0, n + 1):\n", " fx = f(x)\n", " somme += f(x) * h\n", " x += h\n", " if last_f is not None:\n", " md = abs(fx - last_f) / h\n", " max_fp = max(max_fp, md)\n", " last_f = fx \n", " return somme, max_fp * n * h**2\n", "\n", "def integrale_precise_derivee(f, a, b, n0, precision):\n", " val, prec = integrale_precision(f, a, b, n0)\n", " val0 = None\n", " while val0 is None or prec > precision:\n", " val0 = val\n", " n0 += 1\n", " val, prec = integrale_precision(f, a, b, n0)\n", " return val, n0\n", "\n", "integrale_precise_derivee(lambda x: x, 0, 1, 10, 1e-3)"]}, {"cell_type": "code", "execution_count": 14, "metadata": {"collapsed": true}, "outputs": [], "source": []}, {"cell_type": "markdown", "metadata": {}, "source": ["## La fonction r\u00e9calcitrante\n", "\n", "L'int\u00e9grale de Rienmann converge pour toute fonction dont les discontinuit\u00e9s sont de mesures nulles. Num\u00e9riquement, c'est autre chose. On peut construire une telle fonction pour laquelle le calcule de l'int\u00e9grale ne converge pas.\n", "\n", "$$f(x) = \\left\\{ \\begin{array}{ll}2 \\text{ si } x = k2^{-n} \\forall k,n \\in \\mathbb{N} \\\\ 1 \\text{ sinon } \\end{array}\\right.$$"]}, {"cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [{"data": {"text/plain": ["(1, 2, 2)"]}, "execution_count": 16, "metadata": {}, "output_type": "execute_result"}], "source": ["import math\n", "\n", "def bizarre(x, n):\n", " if x == 0:\n", " return 1\n", " kn = int(math.log(n) / math.log(2)) + 1\n", " a = 2**kn * x\n", " d = abs(int(a + 1e-10) - a)\n", " if d < 1e-10:\n", " return 2\n", " else:\n", " return 1\n", "\n", "bizarre(0.33, 8), bizarre(0.5, 8), bizarre(0.125, 8)"]}, {"cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": ["def integrale_bizarre(f, a, b, n):\n", " somme = 0\n", " h = float(b-a) / n\n", " x = a\n", " for i in range(0, n + 1):\n", " # m\u00eame fonction mais on passe n \u00e9galement\n", " somme += f(x, n) * h\n", " x += h\n", " return somme\n", "\n", "px = list(range(1,257))\n", "py = [integrale_bizarre(bizarre, 0, 1, i) for i in px]"]}, {"cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [{"data": {"text/plain": ["2.125"]}, "execution_count": 18, "metadata": {}, "output_type": "execute_result"}], "source": ["integrale_bizarre(bizarre, 0, 1, 8)"]}, {"cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [{"data": {"text/plain": ["2.0625"]}, "execution_count": 19, "metadata": {}, "output_type": "execute_result"}], "source": ["integrale_bizarre(bizarre, 0, 1, 16)"]}, {"cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [{"data": {"text/plain": ["1.2857142857142856"]}, "execution_count": 20, "metadata": {}, "output_type": "execute_result"}], "source": ["integrale_bizarre(bizarre, 0, 1, 7)"]}, {"cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [{"data": {"text/plain": ["[]"]}, "execution_count": 21, "metadata": {}, "output_type": "execute_result"}, {"data": {"image/png": "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\n", "text/plain": [""]}, "metadata": {}, "output_type": "display_data"}], "source": ["import matplotlib.pyplot as plt\n", "fig, ax = plt.subplots(1,1)\n", "ax.plot(px, py)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["La fonction est born\u00e9e, int\u00e9grable car elle est constante partout sauf sur un ensemble de mesure nulle qui est plus petit que l'ensemble des rationnels. Pourtant le calcul informatique associ\u00e9e ne converge pas car pour certaines valeurs de $n$, les valeurs prises tombent pour la plupart dans cet ensemble."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Calcul de Monte Carlo\n", "\n", "Ce calcul consiste simplement \u00e0 tirer des valeurs al\u00e9atoirement dans l'intervalle \u00e0 int\u00e9grer puis \u00e0 en faire la moyenne."]}, {"cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [{"data": {"text/plain": ["0.4988542665465702"]}, "execution_count": 22, "metadata": {}, "output_type": "execute_result"}], "source": ["import random\n", "\n", "def integrale_mc(f, a, b, n):\n", " somme = 0\n", " for i in range(0, n):\n", " x = random.uniform(a, b)\n", " somme += f(x)\n", " return somme / n\n", "\n", "# On v\u00e9rifie ave un cas simple.\n", "integrale_mc(lambda x: x, 0, 1, 100)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["On peut appeler plusieurs fois la fonction et faire la moyenne des valeurs obtenues pour obtenir un algorithme qui s'arr\u00eate \u00e0 partir d'une certaine pr\u00e9cision."]}, {"cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [{"data": {"text/plain": ["(0.500918333560406, 100)"]}, "execution_count": 23, "metadata": {}, "output_type": "execute_result"}], "source": ["def integrale_mc_precise(f, a, b, n0, precision):\n", " val = integrale(f, a, b, n0)\n", " moy = val\n", " moy0 = None\n", " nb = 1\n", " while moy0 is None or abs(moy - moy0) / moy0 > precision:\n", " val += integrale_mc(f, a, b, n0)\n", " nb += 1\n", " moy0 = moy\n", " moy = val / nb\n", " return moy, n0\n", "\n", "integrale_mc_precise(lambda x: x, 0, 1, 100, 1e-4)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Quand s'arr\u00eater ?\n", "\n", "L'int\u00e9grale de [Monte Carlo](https://fr.wikipedia.org/wiki/M%C3%A9thode_de_Monte-Carlo) est une variable al\u00e9atoire qui est une moyenne. $I_n(f)=\\frac{1}{n} \\sum_{i=1}^n f((b-a)U_i + b)$ o\u00f9 $U_i$ est une variable al\u00e9atoire uniforme dans l'intervalle $[0,1]$. $f((b-a)U_i + b)$ est une variable al\u00e9atoire qui n'est a priori pas uniforme. Elle est born\u00e9e si fonction $f$ est born\u00e9e. En utilisant le th\u00e9or\u00e8me centrale limite, on sait que $\\sqrt{n}I_n(f)$ tend vers une loi normale dont on peut majorer la variance par $M^2$ o\u00f9 $M=max(\\{f(x) | x \\in [a,b]\\})$. Il suffit ensuite de choisir un $n$ suffisant grand telle sorte que l'intervalle de confiance \u00e0 95% soit suffisamment petit. Si $p$ est la pr\u00e9cision, $\\frac{1.96 M}{\\sqrt{n}} < \\frac{p}{2}$ et donc $n > \\frac{16M^2}{p^2}$.\n", "\n", "Pour une pr\u00e9cision \u00e0 $10^{-2}$ :"]}, {"cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [{"data": {"text/plain": ["0.500765653300686"]}, "execution_count": 24, "metadata": {}, "output_type": "execute_result"}], "source": ["integrale_mc(lambda x: x, 0, 1, int(16e4))"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Mesure du temps\n", "\n", "Les temps ne sont pas vraiment comparables puisque les conditions d'arr\u00eat de chaque fonction ne correspondent pas aux m\u00eame pr\u00e9cisions."]}, {"cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["14.3 \u00b5s \u00b1 215 ns per loop (mean \u00b1 std. dev. of 7 runs, 100000 loops each)\n"]}], "source": ["%timeit integrale_precise(f, a, b, n, 1e-4)"]}, {"cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["20 \u00b5s \u00b1 197 ns per loop (mean \u00b1 std. dev. of 7 runs, 10000 loops each)\n"]}], "source": ["%timeit integrale_precise_2n(f, a, b, n, 1e-4)"]}, {"cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["19.4 \u00b5s \u00b1 394 ns per loop (mean \u00b1 std. dev. of 7 runs, 10000 loops each)\n"]}], "source": ["%timeit integrale_mc_precise(f, a, b, n, 1e-4)"]}, {"cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["765 \u00b5s \u00b1 4.29 \u00b5s per loop (mean \u00b1 std. dev. of 7 runs, 1000 loops each)\n"]}], "source": ["%timeit integrale_precise(lambda x: x, 0, 1, 10, 1e-4)"]}, {"cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["25.6 ms \u00b1 661 \u00b5s per loop (mean \u00b1 std. dev. of 7 runs, 10 loops each)\n"]}], "source": ["%timeit integrale_precise_2n(lambda x: x, 0, 1, 10, 1e-4)"]}, {"cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["291 \u00b5s \u00b1 4.86 \u00b5s per loop (mean \u00b1 std. dev. of 7 runs, 1000 loops each)\n"]}], "source": ["%timeit integrale_mc_precise(lambda x: x, 0, 1, 10, 1e-4)"]}, {"cell_type": "code", "execution_count": 30, "metadata": {"collapsed": true}, "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.6.1"}}, "nbformat": 4, "nbformat_minor": 2}