{
"cells": [
{
"cell_type": "markdown",
"id": "6aa90e9f-ca03-4e8f-823c-e7126f17c88b",
"metadata": {
"editable": true,
"panel-layout": {
"height": 557.717,
"visible": true,
"width": 100
},
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"Notebook Jupyter UTC MT12 \n",
"$$ \\text{UTC MT12} \\quad \\quad \\text{TP} 3 $$"
]
},
{
"cell_type": "markdown",
"id": "340ae53e-7769-44c7-8e12-50263bf89063",
"metadata": {},
"source": [
"###### Cette cellule est une cellule Markdown\n",
"Dans ce TP, on étudie la convergence des séries de Fourier de certaines fonctions. On commence dans un premier temps par une méthode permettant d'approcher la valeur de l'intégrale d'une fonction sur un intevalle.\n",
"\n",
"###### Cette cellule est une cellule Markdown"
]
},
{
"cell_type": "markdown",
"id": "f8efffda-27f0-4e1b-8e8f-282ecf1e2376",
"metadata": {
"panel-layout": {
"height": 3187.33,
"visible": true,
"width": 100
}
},
"source": [
"#### Plan \n",
"[1. Intégration d'une fonction continue sur un intervalle borné](#1.-Intégration-d-'-une-fonction-continue-sur-un-intervalle-borné)\n",
"\n",
"[2. Convergence ponctuelle de la série de Fourier d'une fonction périodique régulière](#2.-Convergence-ponctuelle-de-la-série-de-Fourier-d-'-une-fonction-périodique-régulière)\n",
"\n",
"[3. Phénomène de Gibbs pour une fonction périodique discontinue](#3.-Phénomène-de-Gibbs-pour-une-fonction-périodique-discontinue)"
]
},
{
"cell_type": "markdown",
"id": "66f610d2-e32c-4019-ba00-996647530579",
"metadata": {
"panel-layout": {
"height": 282.3,
"visible": true,
"width": 100
}
},
"source": [
"# 1. Intégration d'une fonction continue sur un intervalle borné"
]
},
{
"cell_type": "markdown",
"id": "2666429f-a7c0-40ba-adff-7e0f521c7c2a",
"metadata": {
"panel-layout": {
"height": 3557.78,
"visible": true,
"width": 100
}
},
"source": [
"Soit $[a,b]$ avec $a "
]
},
{
"cell_type": "markdown",
"id": "4cab11bb-680d-4d16-b8d0-e2924dee695b",
"metadata": {},
"source": [
"## 1.1 Questions"
]
},
{
"cell_type": "markdown",
"id": "5463d09d-2ff1-4d21-b96b-fc4cce64546b",
"metadata": {
"panel-layout": {
"height": 1089.37,
"visible": true,
"width": 100
}
},
"source": [
"Dans un premier temps, on cherche à coder une fonction $$[N,I_-,I_+] = \\text{Riemann}(f, a, b, \\varepsilon),$$ qui retourne un entier $N=N(\\varepsilon)$ (idéalement le plus petit possible) et un encadrement de l'intégrale $I$ avec une précision $\\varepsilon$ imposée et garantissant la relation \n",
"$$I_+(N)-I_-(N) \\leq \\varepsilon \\qquad (3)$$ \n",
"\n",
"Notons que l'inégalité suivante est toujours satisfaite : $0\\leq I_+(N)-I_-(N)$."
]
},
{
"cell_type": "markdown",
"id": "6e796e89-7062-4f11-8829-586bc3d7607a",
"metadata": {
"panel-layout": {
"height": 2461.37,
"visible": true,
"width": 100
}
},
"source": [
"**Remarque** \n",
"\n",
"En pratique, le $\\min$ et le $\\max$ qui interviennent dans les formules (1) et (2) ci-dessus seront évalués (approchés) sur une grille plus fine (20 points par subdivision par exemple). \n",
"\n",
"En effet, pour évaluer le $\\max$ (ou le $\\min$) de $f$ sur les intervalles de la forme $[a+(k-1)h, a+kh[$ pour $1 \\leq k \\leq N$, on considère : $$f_k^{\\min} = \\min_{j\\in\\{0,19\\}} f(a+(k-1)h+j h/20),\\quad f_k^{\\max} = \\max_{j\\in\\{0,19\\}} f(a+(k-1)h+j h/20),$$ \n",
"puis on définit $$ I_-(N) = h \\sum_{k=1}^N f_k^{\\min}\\quad \\text{et} \\quad I_+(N) = h \\sum_{k=1}^N f_k^{\\max}$$ \n",
"\n",
"Dans l'algorithme, on initialisera $N$ à une \"petite\" valeur (par exemple $N=1,2,3$), puis on si la condition (3) n'est pas satisfaite, on multipliera $N$ par $2$, et on répétera l'opération jusqu'à ce que la condition (3) soit satisfaite. "
]
},
{
"cell_type": "markdown",
"id": "41a66df8-688d-48b6-b99e-6f4950568f48",
"metadata": {
"panel-layout": {
"height": 231.867,
"visible": true,
"width": 100
}
},
"source": [
"### Q1 Compléter le code suivant afin d'obtenir une valeur approchée de $I$ à $\\epsilon$ près et la valeur de $N(\\epsilon)$ associée."
]
},
{
"cell_type": "raw",
"id": "2c9c7150-de38-46cb-9372-119b5e94f0c1",
"metadata": {
"panel-layout": {
"height": 932.65,
"visible": true,
"width": 100
}
},
"source": [
"import numpy as np\n",
"def Riemann (f,a,b,epsilon):\n",
" N=1\n",
" done = bool(0) # booléen \"False\"\n",
" nsubdiv=20 # approximation du min et du max sur une grille de taille 20 dans chaque sous-intervalle\n",
" while not done: #tant que 'not done == True\"\n",
" N=2*N\n",
" Iplus=0\n",
" Imoins=0\n",
" for k in range(N):\n",
" Ik = [a+k*(b-a)/N, a+(k+1)*(b-a)/N]\n",
" subdiv = np.linspace(float(Ik[0]), float(Ik[1]), nsubdiv)\n",
" fmin= ...\n",
" fmax= ...\n",
" Imoins= ...\n",
" Iplus= ...\n",
" done = (Iplus-Imoins< epsilon)\n",
" return [N,Imoins,Iplus]\n",
"\n",
"\n",
"###### Cette cellule est une cellule Raw"
]
},
{
"cell_type": "markdown",
"id": "91877d01-ae2c-4e0a-b675-0e7befa96ab8",
"metadata": {
"panel-layout": {
"height": 900.717,
"visible": true,
"width": 100
}
},
"source": [
"### Q2 Appliquer votre code précédent à la fonction $f(x)=\\sin(\\pi x)$ pour approcher $$ I=\\int_0^1 \\sin(\\pi x)\\, dx, \\quad \\text{ en prenant} \\; \\varepsilon=10^{-4}$$\n",
"\n",
"Pour cela,\n",
"* calculer $I$ à la main\n",
"* coder la fonction $f_{\\sin}$ qui à $x$ dans $[0,1]$ retourne $f(x)=\\sin(\\pi x)$\n",
"* cxécuter \"Riemann$(f_{\\sin},0,1,0.0001)$\"\n",
"* calculer cette même valeur en important la bibliothèque \"scipy integrate\" par la ligne de commande \"from scipy.integrate import quad\"\n",
"* exécuter \"$I_{num}=quad(f_{\\sin},0,1)$\" qui retourne la valeur approchée nuùériquement de l'intégration de $f$ sur l'intervalle $(0,1)$ ainsi que son erreur\n",
"* comparer $I_{num}$ et $I$ aux sorties $I_{-}(N)$ et $I_+(N)$ de la fonction Riemann."
]
},
{
"cell_type": "markdown",
"id": "49461119-e33b-4c6d-954b-f0a7568ad0d6",
"metadata": {
"panel-layout": {
"height": 849.267,
"visible": true,
"width": 100
}
},
"source": [
"### Q3 Comparaison avec la méthode des rectangles\n",
"En reprenant le TD du Chapitre 1, coder la méthode des rectangles à gauche pour approcher la valeur de $I$ à une erreur d'approximation inférieure ou égale à $\\varepsilon=10^{-4};$ vérifier que cette erreur est bien inférieure à la valeur de sa majoration donnée en TD: \n",
"\\begin{align*}\n",
"I\\approx I_{app,rect}& =\\frac{b-a}{N} \\sum_{k=0}^{N-1}f(x_k), \\quad a=0=x_0