diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d6ae438e006426e5988cb66d3b584027c9947f95..3bfa18afcbc77d00a66809ee5d15e5406e3d4e5f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -37,12 +37,12 @@ build_only: - make deploy - rsync -avzz mti ur1bg_malas@ur1bg.ftp.infomaniak.com:web/malaspinas/ -#build_artifacts: -# script: -# - make -# artifacts: -# paths: -# - "cours.html" -# - "cours.pdf" +build_artifacts: + script: + - make + artifacts: + paths: + - "cours.html" + - "cours.pdf" #only: # - tags diff --git a/01_rappel.md b/01_rappel.md index 25c80b6315c0e1a21af3a96b22ef0ce5c29cfe3e..b836992ed0480b12ec92bfd7238ed2fa39c09bd2 100644 --- a/01_rappel.md +++ b/01_rappel.md @@ -10,7 +10,7 @@ Nous pouvons aussi exprimer cette notion de la manière suivante. Considérons d --- -Exemple (Fonctions, généralités) +.# +#### Exemple (Fonctions, généralités) {-} 1. La tension $U$ est une fonction de la résistance $R$ et du courant $I$ $$\begin{aligned} @@ -33,7 +33,7 @@ $$y=g(f(x)).$$ --- -Exemple (Fonctions) +.# +#### Exemple (Fonctions) {-} 1. Soit $f(x)=2\cdot x$ et $g(x)=\sqrt{x}$, alors la composition des deux fonctions $$(f\circ g)(x)=f(g(x))=f(\sqrt{x})=2\sqrt{x}.$$ @@ -50,7 +50,7 @@ la variable de départ $$f(f^{-1}(x))=x.$$ --- -Exemple (Fonction inverse) +.# +#### Exemple (Fonction inverse) {-} 1. Soient $f(x)=2\cdot x$ et $f^{-1}(x)=x/2$, alors la composition des deux fonctions $$f(f^{-1}(x))=f(x/2)=2x/2=x.$$ @@ -68,14 +68,14 @@ Exemple (Fonction inverse) +.# ## Domaine de définition -Définition (Domaine de définition) +.# +#### Définition (Domaine de définition) {-} Le domaine de définition, noté $D\subset{\real}$, d’une fonction $f$, est l’ensemble de valeurs où $f$ admet une image. --- -Exemple (Domaine de définition) +.# +#### Exemple (Domaine de définition) {-} 1. Le domaine de définition de $f(x)=x$ est $D={\real}$. @@ -92,7 +92,7 @@ Soit $f$ une fonction et $D\subseteq{\real}$ non-vide et soient $a$ et $b$ deux ### Limite -Définition (Limite) +.# +#### Définition (Limite) {-} Pour $f$ définie en $D$, on dit que $b$ est la limite de $x$ en $a$ si si au fur et à mesure que $x$ se rapproche de $a$, $f(x)$ se rapproche de $b$ et nous notons $\lim\limits_{x\rightarrow a}f(x)=b$. @@ -107,20 +107,20 @@ Ou encore quand le but est d'écrire ça de la façon la plus compacte possible $$\forall\varepsilon>0,\exists\delta>0\ |\ \forall x\in D,\ |x-a|<\delta\Rightarrow|f(x)-b|<\varepsilon.$$ -Remarque +.# +#### Remarque {-} Il n'est pas nécessaire que $a\in D$. Mais si c'est le cas et donc $f$ est définie en $a$ alors on a $\lim\limits_{x\rightarrow a}=f(a)$. --- -Exemple (Limite) +.# +#### Exemple (Limite) {-} Si $f(x)=x$, alors $\lim\limits_{x\rightarrow 0}f(x)=0$. --- -Définition (Limite, asymptote) +.# +#### Définition (Limite, asymptote) {-} Pour $f$ définie en $D$, on dit que la limite de $f(x)$ en $a$ est égale à l’infini si pour tout $c>0$ l’intervalle @@ -129,7 +129,7 @@ $a$. On dit aussi que $f$ tend vers l'infini. --- -Exemple (Limite, asymptote) +.# +#### Exemple (Limite, asymptote) {-} Si $f(x)=1/x^2$, alors $\lim\limits_{x\rightarrow 0}f(x)=\infty$. @@ -150,7 +150,7 @@ fonction $f$ en $a$. Si la fonction $f$ admet une limite en $a$, alors les deux limites sont égales. -Exemple (Limite à gauche/droite) +.# +#### Exemple (Limite à gauche/droite) {-} Si $f(x)=1/x$, alors $\lim\limits_{x\rightarrow 0^+} f(x)=\infty$ et $\lim\limits_{x\rightarrow 0^-} f(x)=-\infty$. @@ -179,7 +179,7 @@ $f(x)=3x^3+1$, $g(x)=4x^3+2x^2+x$ $$ \lim_{x\rightarrow \infty}\frac{f(x)}{g(x)}=\lim_{x\rightarrow \infty}\frac{3x^3(1+1/3x^3)}{4x^3(1+1/2x^+1/4x^2)}=\frac{3}{4}.$$ -Ce genre d’estimations est imporant en informatique lors de l’analyse de +Ce genre d’estimations est important en informatique lors de l’analyse de performance des algorithmes. On peut prendre l’exemple des algorithmes de tri “bubble sort†et “quick sortâ€. Leur complexité respective moyenne est de $n^2$ et de $n\log(n)$, quand $n$ est le nombre d’éléments de la @@ -202,13 +202,13 @@ $$\lim_{n\rightarrow\infty}\frac{n}{\log(n)}=\frac{A}{\log(10)}\cdot\lim_{p\righ ## Continuité -Définition (Continuité) +.# +#### Définition (Continuité) {-} Soit $f$ une fonction définie sur un intervalle ouvert $D$ contenant $a$. On dit que $f$ est continue en $a$ si et seulement si $\lim\limits_{x\rightarrow a}f(x)=f(a)$. -Propriétés (Fonctions continues) +.# +#### Propriétés (Fonctions continues) {-} Soient $f$ et $g$ deux fonctions continues en $a$ et $b$ un réel: @@ -220,14 +220,14 @@ Soient $f$ et $g$ deux fonctions continues en $a$ et $b$ un réel: 4. $h=g\circ f$ est continue en $a$. -Définition (Continuité sur un intervalle) +.# +#### Définition (Continuité sur un intervalle) {-} Une fonction $f$ est dite continue dans un intervalle $D=]a;b[$ si et seulement si elle est continue en tout point de $D$. De plus, elle est continue sur $D=[a,b]$ si elle est continue sur $]a;b[$ et continue à droite en $a$ et à gauche en $b$. -Théorème (Valeurs intermédiaires) +.# +#### Théorème (Valeurs intermédiaires) {-} Soit $f$ une fonction continue sur $D$, et $a,b$ deux points contenus dans $D$ tels que $a<b$ et @@ -236,7 +236,7 @@ Nous pouvons bien sûr énoncer un résultat similaire dans le cas $f(a9>f(b)$. ## Dérivées -Définition (Dérivée en un point) +.# +#### Définition (Dérivée en un point) {-} Soit $f$ une fonction définie sur $D$ et $a\in D$. On dit que $f$ est dérivable en $a$ s’il existe un $b$ (appelé la dérivée de $f$ en $a$) @@ -244,17 +244,17 @@ tel que $$\begin{aligned} &\lim\limits_{h\rightarrow 0}\frac{f(a+h)-f(a)}{h}=b,\hbox{ ou}\\ &\lim\limits_{x\rightarrow a}\frac{f(x)-f(a)}{x-a}=b.\end{aligned}$$ -Définition (Dérivée sur un intervalle) +.# +#### Définition (Dérivée sur un intervalle) {-} Si $f$ est dérivable en tout point de $D=]a;b[$, alors on définit $f'$ la fonction dérivée de $f$ dans l’intervalle $D$ qui associe en tout point $x$ de $D$ la valeur dérivée de $f$. -Propriété +.# +#### Propriété {-} Si $f$ est dérivable en $a$ alors $f$ est continue en $a$. -Propriétés +.# +#### Propriétés {-} Soient $f$ et $g$ deux fonctions dérivables sur $D$ (dont les dérivées sont $f'$ et $g'$), et $a\in{\real}$, alors @@ -285,14 +285,14 @@ $C\in {\real}$, nous avons 6. $f(x)=\cos(x)$, $f'(x)=-\sin(x$). -Définition (Dérivée seconde) +.# +#### Définition (Dérivée seconde) {-} Si $f'$ est dérivable sur $D$, alors sa dérivée, notée $f''$, est appelée la dérivée seconde de $f$. ### Variation des fonctions -Propriétés (Croissance/décroissance) +.# +#### Propriétés (Croissance/décroissance) {-} Soit $f'$ la fonction dérivée de $f$ sur $D$ @@ -302,13 +302,13 @@ Soit $f'$ la fonction dérivée de $f$ sur $D$ 3. Si $f'=0$ sur $D$, alors $f$ est constante sur $D$. -Définition (Maximum/minimum local) +.# +#### Définition (Maximum/minimum local) {-} Une fonction admet un maximum local (respectivement minimum local) sur un intervalle $D=]a;b[$ s’il existe un $x_0\in D$ tel que $f(x_0)\geq f(x)$ (respectivement $f(x_0)\leq f(x)$) pour tout $x\in D$. -Propriété (Maximum/minimum) +.# +#### Propriété (Maximum/minimum) {-} Soient $f$ une fonction dérivable sur $D=]a;b[$ et $x_0\in D$. On dit que $f$ admet un extremum en $x_0$ si $f'(x_0)=0$. De plus si diff --git a/03_optimisation.md b/02_optimisation.md similarity index 86% rename from 03_optimisation.md rename to 02_optimisation.md index 6aafe7def8c57c125b20d2517cf86a6c3e15e473..585deeb1e40c265c9a1ced8e33252e89d7d1bd3c 100644 --- a/03_optimisation.md +++ b/02_optimisation.md @@ -9,7 +9,7 @@ $i=1,...,N$ (voir @fig:reg). <https://bit.ly/2SfiLzb>](figs/Linear_regression.svg){#fig:reg width=70%} Pour déterminer l'équation de cette droite, nous devons donc trouver les coefficients $a$ et $b$ tels que la droite -passe au plus proche des points. Nous devons d'abord définir ce que signifie mathématiquement "passe au mieux par au travaers du nuage de points". +passe au plus proche des points. Nous devons d'abord définir ce que signifie mathématiquement "passe au mieux par au travers du nuage de points". Une façon de mesurer la "qualité" d'une droite est de mesurer la somme des distances au carré entre les points $(x_i,y_i)$ et la droite $y(x)=a\cdot x + b$ pour des valeurs de $a$ et $b$ données, soit $$ @@ -45,7 +45,7 @@ a &= \frac{C}{B}=\frac{\sum_{i=1}^Nx_iy_i}{\sum_{i=1}^Nx_i^2}. --- -Exemple +.# +#### Exemple {-} Soient les 4 points $(0, 0.1)$, $(1, 0.3)$, $(2, 0.3)$ et $(3, 0.4)$. La fonction d'erreur $E(a)$ s'écrit $$ @@ -71,25 +71,25 @@ Ce genre de problème, bien que possédant un espace de recherche infini, est bien souvent plus simple à résoudre que les problèmes d'optimisation discrets, car il possède un cadre théorique mieux défini. Pour le résoudre, nous avons commencé par construire un modèle mathématique. -Nous avons défini une fonction à minimiser, $E(a)$, et ajouté une contraite, la forme de $y(x)$. Puis, il a suffi de trouver le minimum de $E(a)$ +Nous avons défini une fonction à minimiser, $E(a)$, et ajouté une contrainte, la forme de $y(x)$. Puis, il a suffi de trouver le minimum de $E(a)$ sous la contrainte et le tour était joué. ## L'optimisation mathématique Suite à ces deux exemples, nous allons essayer de définir de façon assez théorique comment formuler mathématiquement un problème d'optimisation. -Il existe deux types disctincts de problèmes d'optimisation: +Il existe deux types distincts de problèmes d'optimisation: 1. L'optimisation continue. 2. L'optimisation discrète (souvent appelée optimisation combinatoire). -Dans ce chapitre nous ne parlerons que del'optimisation continue. +Dans ce chapitre nous ne parlerons que de l'optimisation continue. ### L'optimisation continue L'optimisation continue ou *programme mathématique continu* est un programme d'optimisation soumis à certaines contraintes. On peut l'exprimer de la façon suivante. -Soit $f:\real^n\rightarrow\real$ une fonction objectif (ou fontion de coût), on cherche $\vec x_0\in\real^n$, tel que $f(\vec x_0)\leq f(\vec x)$ pour $\vec x$ certaines conditions: **les contraintes**. Celles-ci sont en général des égalités strictes ou des inégalités qui peuvent s'exprimer de la façon suivante. +Soit $f:\real^n\rightarrow\real$ une fonction objectif (ou fonction de coût), on cherche $\vec x_0\in\real^n$, tel que $f(\vec x_0)\leq f(\vec x)$ pour $\vec x$ certaines conditions: **les contraintes**. Celles-ci sont en général des égalités strictes ou des inégalités qui peuvent s'exprimer de la façon suivante. Soient $m$ fonctions $g_i:\real^n\rightarrow\real$ \begin{align} &g_i(\vec x)\leq 0,\quad i=1,...,m. @@ -119,7 +119,7 @@ optimiser les poids des réseaux de neurones. ## Optimisation continue Dans cette section, nous allons considérer des problèmes purement continus. -Nous allons dans un premier temps considérer une fonction opbjectif, $f$, +Nous allons dans un premier temps considérer une fonction objectif, $f$, $$ f:D\rightarrow\real,\quad D\subseteq \real, $$ @@ -144,8 +144,8 @@ $$ Les cas où $f''(x)=0$ est un point d'inflexion et $f''(x)<0$ est un maximum. Un autre problème beaucoup plus compliqué à résoudre est de déterminer un minimum **global**. -En effet, comme pour la fonction de Ackley (voir la @fig:ackley), une fonction peut posséder un grand nombre de minimam **locaux** (où -$f'(x)=0$ et $f''(x)>0$) mais qui n'est pas un mimumum global. +En effet, comme pour la fonction de Ackley (voir la @fig:ackley), une fonction peut posséder un grand nombre de minima **locaux** (où +$f'(x)=0$ et $f''(x)>0$) mais qui n'est pas un minimum global. Mathématiquement un *minimum local* se définit comme $x^\ast$ tel qu'il existe $\delta>0$ et que $f(x^\ast)\leq f(x)$, pour $x\in[x^\ast-\delta,x^\ast+delta]$. Un *minimum global* est un $x^\ast$ tel que $\forall x\in D$, $f(x^\ast)\leq f(x)$. @@ -166,7 +166,7 @@ analytiquement les zéros. En revanche, pour des fonctions plus complexes, ou "i l'équation $g(x)=0$ sous la forme $x=...$) la détermination des zéros est beaucoup plus difficile et nécessite l'utilisation de **méthodes itératives**. Nous allons en voir quelques unes. -## Méthodes par raffienement d'intervalles +## Méthodes par raffinement d'intervalles ### Méthode de la bissection @@ -175,7 +175,7 @@ de **méthodes itératives**. Nous allons en voir quelques unes. Afin de déterminer le zéro d'une fonction, une des méthodes les plus simple est la méthode de la bissection. Il s'agit de choisir deux points, $a_1$ et $b_1$, $b_1>a_1$, tels que le signe de $g(a_1)$ et $g(b_1)$ est différent. -Si cela est le cas, nous aommes assurés de l'existence d'au moins un zéro si la fonction $g(x)$ est continue +Si cela est le cas, nous sommes assurés de l'existence d'au moins un zéro si la fonction $g(x)$ est continue (en vertu du théorème de la valeur intermédiaire). Ensuite, nous allons calculer la valeur se situant "au milieu" entre $a_1$ et $b_1$ $$ @@ -183,7 +183,7 @@ c_1=\frac{b_1+a_1}{2}. $$ Puis, nous évaluons $g(c_1)$ et si ce n'est pas un zéro, étudions son signe. Si le signe $g(c_1)$ est différent de celui de $g(a_1)$, nous remplaçons $b_1$ par $c_1$ et recommençons. Si le signe de $g(c_1)$ est différent de celui de $g(b_1)$, nous remplaçons $a_1$ par $c_1$. -Nous itérons cette méthode jusqu'à ce que nous ayons atteint une valeur "siffisamment proche" (nous vons une précision acceptable pour nous) +Nous itérons cette méthode jusqu'à ce que nous ayons atteint une valeur "suffisamment proche" (nous avons une précision acceptable pour nous) de zéro. Une façon d'exprimer "proche" est de considérer la taille de l'intervalle $b_1-a_1$ et de le comparer avec une précision $\varepsilon>0$ que nous aurons choisie $$ @@ -196,7 +196,7 @@ distance maximale du zéro de $(b_1+a_1)/2^n$. On dit que cette méthode est d'o --- -Exercice (Racice de polynôme) +.# +#### Exercice (Racine de polynôme) {-} Déterminer la racine du polynôme $x^4+x^3+x^2-1$ avec $a_1=0.5$ et $b_1=1$ (faire au maximum 6 itérations). @@ -232,7 +232,7 @@ La méthode de la fausse position est plus efficace que la méthode de la bissec --- -Exercice +.# +#### Exercice {-} Déterminer le zéro positif de la fonction $$ @@ -261,7 +261,7 @@ En revanche elle est plus efficace, lorsque qu'elle converge, que ces deux méth --- -Exercice +.# +#### Exercice {-} Déterminer le zéro positif de la fonction $$ @@ -271,7 +271,7 @@ $$ --- -### Recherche de la fourchette intiale +### Recherche de la fourchette initiale Dans les méthodes ci-dessus, nous avons supposé que nous avions une fonction $g(x)$ continue, ainsi qu'un intervalle, $[a,b]$, avec @@ -282,7 +282,7 @@ Mais, nous n'avons pas encore vu de méthode pour déterminer les valeur de la f --- -Remarque +.# +#### Remarque {-} On peut procéder de façon très similaire pour $[a,b]$ tel que @@ -304,7 +304,7 @@ Si $f(b)>0$, on a terminé. Sinon on recommence avec $k\rightarrow 2\cdot k$ et ## Méthodes de descentes locales L'idée de ce type de méthodes est, contrairement aux méthodes de la section précédente, d'utiliser des -connaissances *locales* que nous pouvons avoir sur la fonction. Cette connsaissance loale +connaissances *locales* que nous pouvons avoir sur la fonction. Cette connaissance locale a en général comme effet une *convergence* plus rapide de l'algorithme de recherche de zéros. ### Méthode de Newton (ou *Newton-Raphson*) @@ -338,12 +338,12 @@ $$ |g(x_n)| < \varepsilon,\quad |x_n-x_{n-1}| < \varepsilon. $$ -Lorsque qu'elle converge la mtéhode de Newton est la plus efficace de toutes celles que nous avons vues. On dit qu'elle est d'ordre $2$. +Lorsque qu'elle converge la méthode de Newton est la plus efficace de toutes celles que nous avons vues. On dit qu'elle est d'ordre $2$. En revanche les contraintes pour sa convergence sont plus strictes que pour les méthodes vues précédemment. --- -Remarque (non-convergence ou convergence lente) +.# +#### Remarque (non-convergence ou convergence lente) {-} Il y a un certain nombre de cas où la méthode de Newton ne converge pas. @@ -357,7 +357,7 @@ Il y a un certain nombre de cas où la méthode de Newton ne converge pas. --- -Exercice +.# +#### Exercice {-} Déterminer le zéro de la fonction $$ @@ -375,9 +375,9 @@ Il suffit de remplacer $g(x)$ par $f'(x)$ et le tour est joué. --- -Exercice +.# +#### Exercice {-} -Écrire l'algorithme de Newton pour le cas de la minimisation d'une fonction $f(x)$ quelconque, mais continuement dérivable 2 fois. +Écrire l'algorithme de Newton pour le cas de la minimisation d'une fonction $f(x)$ quelconque, mais continûment dérivable 2 fois. --- @@ -398,7 +398,7 @@ f:\real^n\rightarrow \real. --- -Exemple (Régression linéaire) +.# +#### Exemple (Régression linéaire) {-} Dans le cas de la régression linéaire, si la droite ne passe pas par l'origine, nous avons que la fonction de coût qui dépend de deux variables, $a$, et $b$ (et plus uniquement de $a$) @@ -417,7 +417,7 @@ f'(a)=\frac{\dd f}{\dd x}(a)=\lim_{\dd x\rightarrow 0}\frac{f(a+\dd x)-f(a)}{\dd \end{equation} La notation ici n'est pas tout à fait usuelle. L'idée est de se rappeler que ce $\dd x$ est une toute petite variation de $x$, et $\dd f$, une toute petite variation de $f$ en $a$. On voit immédiatement que cette quantité est la pente -de $f$ en $a$. Lorsque nous étudions une fonction à plusieurs variables, nous pouvons faire le même raisonnement pour chaque variable indépendemment. +de $f$ en $a$. Lorsque nous étudions une fonction à plusieurs variables, nous pouvons faire le même raisonnement pour chaque variable indépendamment. Ainsi, nous calculons sa dérivée dans chacune des directions $x$, $y$, ... Cette vision de la dérivée comme une variation de $f$, $\dd f$, divisée par une petite variation de $x$, $\dd x$, permet @@ -445,7 +445,7 @@ Comme on le voit ici, pour chaque dérivée partielle, on ne fait varier qu'une --- -Exemple (Dérivée partielle) +.# +#### Exemple (Dérivée partielle) {-} Les dérivée partielles de la fonction $$ @@ -468,7 +468,7 @@ $$ --- -Remarque +.# +#### Remarque {-} Pour une fonction à une seule variable, $f(x)$, on a que $$ @@ -488,7 +488,7 @@ pour les façon à une seule variable. Pour une fonction à deux variables, on a --- -Remarque +.# +#### Remarque {-} Si $f$ est dérivable en $x$ et $y$, on a que $$ @@ -499,7 +499,7 @@ $$ --- -Exemple (Dérivées partielles deuxièmes) +.# +#### Exemple (Dérivées partielles deuxièmes) {-} Pour la fonction $f(x,y)=x^2-y^2$, on a \begin{align} @@ -549,14 +549,14 @@ $$ --- -Exemple (Gradient d'une fonction à deux variables) +.# +#### Exemple (Gradient d'une fonction à deux variables) {-} Pour la fonction $f(x,y)=x^2-y^2$, le gradient est donné par $$ \vec \nabla f=\left(2x, -2y\right)^\mathrm{T}. $$ -Graphiquement, ceci est un *champds de vecteur* est peut se représenter comme +Graphiquement, ceci est un *champs de vecteur* est peut se représenter comme {width="50%"} @@ -610,7 +610,7 @@ Le taux de variation maximal est donc la longueur du vecteur $\vec \nabla f$. --- -Remarque (Généralisation) +.# +#### Remarque (Généralisation) {-} Tout ce que nous venons d'écrire ici se généralise à un nombre arbitraire de dimensions. @@ -711,10 +711,69 @@ Même si cela ne suffit pas à prouver mathématique que $\vec 0$ est le minimum --- -Question +.# +#### Question {-} Avec ce qui précède, voyez-vous une façon de trouver le minimum de la fonction $f(x,y)$? --- -Une méthode pour trouver le minimum de $f(x,y)$ est la méthode de la *descente de gradient*. +Une méthode pour trouver le minimum de $f(x,y)$ est la méthode de la *descente de gradient*. Cette méthode +correspond intuitivement à la méthode que suivrait un skieur pour arriver le plus vite possible en bas d'une montagne. Pour ce faire, il suivrait toujours la pente +la plus raide possible. + +La méthode de la descente de gradient est une méthode +itérative. Soient donnés un point de départ $\vec x_0$, +et une fonction objectif $f(\vec x)$, on va approximer +le zéro itérativement avec une suite $\vec x_1$, $\vec x_2$, ... telle que +\begin{align} +\vec x_1&=x_0-\lambda\cdot \nabla f(\vec x_0),\\ +\vec x_2&=x_1-\lambda\cdot \nabla f(\vec x_1),\\ +\cdots +\vec x_{n+1}&=x_n-\lambda\cdot f(\vec x_n), +\end{align} +où $\lambda\in \real^+$ est un coefficient positif. +On peut assez facilement se convaincre que si $\lambda$ est suffisamment petit, alors $f(\vec x_{n+1})\leq f(\vec x_n)$ (on ne fait que descendre la pente jusqu'à atteindre un minimum). Une illustration de ce processus +peut se voir dans la @fig:gradient. + +{#fig:gradient width=70%} + +--- + +#### Exemple (quelques itérations) {-} + +Prenons la fonction objectif $f(x,y)$ suivante +$$ +f(x,y)=x^2+y^2, +$$ +et son gradient +$$ +\nabla f(x,y)=2x+2y. +$$ +Si on prend comme point de départ $\vec x_0=(1,0.5)$ et $\lambda=0.25$, on a +\begin{align} +\vec x_1=\vec x_0-\lambda\cdot \nabla f(\vec x_0)=(1,0.5)-0.25\cdot (2\cdot 1, 2\cdot 0.5)=(0.5, 0.25),\\ +\vec x_2=\vec x_1-\lambda\cdot \nabla f(\vec x_1)=(0.5,0.25)-0.25\cdot (2\cdot 0.5, 2\cdot 0.25)=(0.25, 0.125),\\ +\cdots +\end{align} +En changeant $\lambda=0.5$, on voit qu'on arrive sur le zéro de la fonction en une itération +\begin{align} +\vec x_1=\vec x_0-\lambda\cdot \nabla f(\vec x_0)=(1,0.5)-0.5\cdot (2\cdot 1, 2\cdot 0.5)=(0, 0). +\end{align} + +--- + +Comme pour les fonction à une seule variable, il est nécessaire de spécifier une condition d'arrêt pour +la descente de gradient. En général, on choisit une tolérance, $\varepsilon>0$, et la condition d'arrêt s'écrit +$$ +\mbox{Si }||\vec x_{n+1}-\vec x_n|| < \varepsilon, +$$ +alors $\vec x_{n+1}$ est le zéro de $f(\vec x)$. + +Dépendant de la valeur de $\lambda$ la *convergence* de la méthode peut varier grandement. Si $\lambda$ est trop petit +il faut une énorme quantité d'itérations pour atteindre le minimum. A l'inverse, en choisissant un $\lambda$ trop grand, +nous ne somme pas sûrs que nous convergerons un jour. En effet, on pourrait s'éloigner de plus en plus +du minimum plutôt que de sen approcher. En général, on choisit $\lambda\in[0,1)$ mais il n'y a pas de méthode générale pour en choisir une valeur "optimale". +Cela signifie que pour une fonction quelconque, $\lambda$ est choisi de façon empirique. + + diff --git a/02_integrales.md b/03_integrales.md similarity index 96% rename from 02_integrales.md rename to 03_integrales.md index 02d9dedfb23496bb69b6c5e456502571c5ab1777..53db1402f0096f824086cfebbe6a4dcd5d8ffca2 100644 --- a/02_integrales.md +++ b/03_integrales.md @@ -38,14 +38,14 @@ L’aire de sous la fonction $f(x)$ est donnée par la limite pour $n\rightarrow\infty$ de $A^i$ ou $A^s$ (si elle existe). Dans ce cas $n\rightarrow\infty$ $A^R$ (pris en sandwich entre $A^i$ et $A^n$) nous donne aussi l'aire sous la fonction. -Remarque +.# +#### Remarque {-} 1. Ces sommes peuvent être positives ou négatives en fonction du signe de $f$. 2. Une implémentation informatique est immédiate, en particulier pour la somme de Riemann. -Définition (Intégrabilité au sens de Riemann) +.# +#### Définition (Intégrabilité au sens de Riemann) {-} Une fonction est dite intégrable au sens de Riemann si $$\lim\limits_{n\rightarrow\infty}A^i(n)=\lim\limits_{n\rightarrow\infty}A^s(n)=\int_a^b f(x){\mathrm{d}}x.$$ @@ -60,7 +60,7 @@ d’intégration. --- -Exemple (Intégration de Riemann) +.# +#### Exemple (Intégration de Riemann) {-} Intégrer de $f(x)=x$ dans intervalle $[0,1]$. @@ -68,7 +68,7 @@ Intégrer de $f(x)=x$ dans intervalle $[0,1]$. --- -Solution (Intégration de Riemann) +.# +#### Solution (Intégration de Riemann) {-} Il est élémentaire de calculer que cette aire vaut $1/2$ (c’est l’aire d’un triangle rectangle de côté 1). Néanmoins, évaluons également cette aire @@ -89,7 +89,7 @@ $\sup\limits_{[x_i,x_{i+1}]}f(x)=f(x_{i+1})$. On a donc que --- -Exemple (Intégration de Riemann de $x^2$) +.# +#### Exemple (Intégration de Riemann de $x^2$) {-} Calculer l’aire sous la courbe de $f(x)=x^2$ dans intervalle $[0,1]$. @@ -125,7 +125,7 @@ Si maintenant nous essayons de généraliser le calcul de l’intégrale d’une fonction, il s’avère que le calcul d’une intégrale est l’inverse du calcul d’une dérivée. -Définition (Primitive) +.# +#### Définition (Primitive) {-} Soit $f$ une fonction. On dit que $F$ est une primitive de $f$ sur l’intervalle $D\subseteq{\real}$ si $F'(x)=f(x)$ $\forall x\in D$. @@ -136,14 +136,14 @@ primitive de $f$. On voit que la primitive de $f$ est définie à une constante additive près. En effet, si $F'=f$ on a $$G'=F'+\underbrace{C'}_{=0}=F'=f.$$ -Théorème (Unicité) +.# +#### Théorème (Unicité) {-} Pour $a\in D$ et $b\in{\real}$ il existe une unique primitive $F$ telle que $F(a)=b$. --- -Illustration (Unicité) +.# +#### Illustration (Unicité) {-} Soit $f(x)=x$, alors l’ensemble de primitives correspondantes est $G=x^2/2+C$. Si nous cherchons la primitive telle que $G(0)=0$, il vient @@ -153,7 +153,7 @@ que $C=0$ et donc la primitive est unique et vaut $F(x)=x^2/2$. --- -Exercices (Primitives) +.# +#### Exercices (Primitives) {-} Calculez les primitives suivantes (*indication: il s’agit de trouver les fonctions $F(x)$ telles que $F'(x)=f(x)$*): @@ -186,7 +186,7 @@ pouvons récapituler des formules qui seront importantes pour la suite: 5. $\int \cos(x){\mathrm{d}}x=\sin(x)+C$. -Théorème (Théorème fondamental du calcul intégral) +.# +#### Théorème (Théorème fondamental du calcul intégral) {-} En définissant à présent l’intégrale à l’aide de la notion de primitive, nous avons que pour $a,b\in{\real}$ et $a<b$ @@ -199,7 +199,7 @@ symbole $x$ par n’importe quelle autre lettre (sauf $a,b,f,F$). --- -Remarque +.# +#### Remarque {-} On notera que la constante additive $C$ a disparu de cette formule. En effet, remplaçons $F$ par $G=F+C$, il vient @@ -215,7 +215,7 @@ Nous pouvons à présent définir la fonction $G(x)$ telle que $$G(x)=\int_a^xf(y){\mathrm{d}}y=F(x)-F(a).$$ Il suit que $G(x)$ est la primitive de $f$ telle que $G(a)=0$. -Propriétés +.# +#### Propriétés {-} Soient $f$ et $g$ deux fonctions intégrables sur un intervalle $D=[a,b]\subseteq{\real}$, $c\in[a,b]$, et $\alpha\in{\real}$. @@ -254,12 +254,12 @@ cas de figures suivants $$\begin{aligned} --- -Exemple (Intégrale impropre) +.# +#### Exemple (Intégrale impropre) {-} Calculer l’intégrale suivante $$\int_0^\infty e^{-ax}{\mathrm{d}}x,\quad a>0.$$ -Solution (Intégrale impropre) +.# +#### Solution (Intégrale impropre) {-} Nous pouvons réécrire l’intégrale ci-dessus comme @@ -269,7 +269,7 @@ $$\int_0^\infty e^{-ax}{\mathrm{d}}x=\lim\limits_{b\rightarrow \infty}\int_0^b e --- -Exercice +.# +#### Exercice {-} Calculer l’intégrale suivante $$\int_1^\infty \frac{1}{x^2}{\mathrm{d}}x.$$ @@ -280,11 +280,11 @@ Lorsque nous avons une discontinuité dans la fonction $f$ au point $c\in[a,b]$ nous avons $$\int_a^b f(x){\mathrm{d}}x = \lim\limits_{\varepsilon\rightarrow 0}\int_a^{c-\varepsilon} f(x){\mathrm{d}}x +\int_{c+\varepsilon}^b f(x){\mathrm{d}}x.$$ -Exercice +.# +#### Exercice {-} Montrer que $$\int_{-1}^2\frac{1}{x}=\ln{2}.$$ -Définition (Valeur moyenne) +.# +#### Définition (Valeur moyenne) {-} Soit une fonction $f$ admettant une primitive sur $[a,b]$ avec $a<b$, alors la valeur moyenne $\bar{f}$ de cette fonction sur $[a,b]$, est définie par @@ -312,7 +312,7 @@ $(\{a_i\}_{i=0}^{n}\in{\real}$ $$\begin{aligned} --- -Exercice +.# +#### Exercice {-} Intégrer la fonction suivante $$\int (x+2)(x^3+3x^2+4x-3){\mathrm{d}}x.$$ @@ -334,14 +334,14 @@ $$\int \frac{f'(x)}{f(x)}{\mathrm{d}}x=\ln(f(x))+c.$$ --- -Exemple +.# +#### Exemple {-} Calculer la primitive suivante $$ \int \frac{1}{x}{\mathrm{d}}x. $$ -Solution +.# +#### Solution {-} Le calcul de la primitive de suivante $$\int \frac{1}{x}{\mathrm{d}}x=\int \frac{(x)'}{x}{\mathrm{d}}x=\ln(x)+c.$$ @@ -354,7 +354,7 @@ Une des façons les plus simples de calculer une primitive est de reconnaître la règle de chaîne dans le terme à intégrer $$\int g'(f(x))f'(x){\mathrm{d}}x=\int [g(f(x))]' {\mathrm{d}}x=g(f(x))+c.$$ -Illustration +.# +#### Illustration {-} Si $g$ est définie comme $g(x)=x^{-1}$ et $f(x)=3x^2+2$, alors la primitive @@ -384,7 +384,7 @@ Des “règles†pour utiliser cette technique seraient que --- -Exemple +.# +#### Exemple {-} Calculer les primitives suivantes @@ -392,7 +392,7 @@ Calculer les primitives suivantes 2. $\int \cos(x)\sin(x){\mathrm{d}}x$. -Solution +.# +#### Solution {-} 1. $\int x e^x{\mathrm{d}}x$. $g(x)=x$, $f'(x)=e^x$ et donc $g'(x)=1$, $f(x)=e^x$. Il vient @@ -415,11 +415,11 @@ parties. --- -Exemple +.# +#### Exemple {-} Calculer l’intégrale de $\int x^2 e^x{\mathrm{d}}x$. -Solution +.# +#### Solution {-} En posant $g(x)=x^2$, $f'(x)=e^x$ et donc $g'(x)=2x$, $f(x)=e^x$. Il vient @@ -432,7 +432,7 @@ $$\int x^2 e^x{\mathrm{d}}x=x^2e^x-2\left(x e^x -\int e^x{\mathrm{d}}x\right)=x^ --- -Exercice +.# +#### Exercice {-} Calculer les primitives suivantes @@ -453,7 +453,7 @@ où $f=F'$. Si nous intégrons cette relation on obtient $$\begin{aligned} \int_a^b f(g(y))g'(y){\mathrm{d}}y = \int_a^b [F(g(y))]'{\mathrm{d}}y=\left.F(g(y))\right|_a^b=F(g(b))-F(g(a))=\int_{g(a)}^{g(b)}f(x){\mathrm{d}}x.\end{aligned}$$ Cette relation nous mène au théorème suivant. -Théorème (Intégration par changement de variables) +.# +#### Théorème (Intégration par changement de variables) {-} Soit $f$ une fonction continue presque partout, et $g$ une fonction dont la dérivée est continue presque partout sur un intervalle $[a,b]$. Soit @@ -473,11 +473,11 @@ sur la solution. --- -Exemple (Changement de variable) +.# +#### Exemple (Changement de variable) {-} Intégrer par changement de variables $\int_1^3 6x\ln(x^2){\mathrm{d}}x$. -Solution (Changement de variable) +.# +#### Solution (Changement de variable) {-} En définissant $z=x^2$, nous avons ${\mathrm{d}}x={\mathrm{d}}z/(2x)$. Les bornes d’intégration deviennent $z(1)=1^2=1$ et $z(3)=3^2=9$. On @@ -490,7 +490,7 @@ obtient donc $$\begin{aligned} --- -Exercice +.# +#### Exercice {-} Calculer les primitives suivantes par changement de variable @@ -521,7 +521,7 @@ Pour chaque valeur de $x=x_0$, on calcule l'intégrale, --- -Exercice (Commutativité) +.# +#### Exercice (Commutativité) {-} Démontrer que le produit de convolution est commutatif, soit \begin{equation} @@ -532,13 +532,13 @@ Indication: utiliser la substitution $\tau=x-t$. --- -Afin de pouvoir interpêter un peu +Afin de pouvoir interpréter un peu ce que cela veut dire, il est intéressant de faire un calcul "simple" pour se faire une idée. --- -Exercice +.# +#### Exercice {-} Calculer la convolution du signal $f(t)$ @@ -629,7 +629,7 @@ dramatiquement la précision de l’intégration. --- -Remarque +.# +#### Remarque {-} De façon générale il est difficile de connaître à l’avance la valeur exacte de $E$. En revanche on est capable de déterminer **l’ordre** @@ -639,7 +639,7 @@ de l’erreur. --- -Définition (Ordre d'une méthode) +.# +#### Définition (Ordre d'une méthode) {-} On dit qu’une méthode d’intégration est d’ordre $k$, si l’erreur commise par la méthode varie proportionnellement à $\delta x^k$. On note qu’une diff --git a/04_edo.md b/04_edo.md index 1c4ce9b5a8168a95513cd698bda0433815b240e8..197c7e2917467911fe3b208446b1d50b34326fc8 100644 --- a/04_edo.md +++ b/04_edo.md @@ -37,7 +37,7 @@ $$x(t_0)=x_0=v\cdot t_0+B \Leftrightarrow B=x_0-v\cdot t_0.$$ Finalement, la solution du problème différentiel est donnée par $$x(t)=v\cdot (t-t_0)+x_0.$$ -Remarque +.# +#### Remarque {-} La solution de l’équation différentielle $$x'(t)=v,\ x(t_0)=x_0,$$ revient à calculer $$\begin{aligned} @@ -77,7 +77,7 @@ $$x(t_0)=x_0=\frac{a}{2}\cdot t_0^2+D \Leftrightarrow D=x_0-\frac{a}{2}\cdot t_0 Finalement la solution est donnée par $$x(t)=\frac{a}{2}\cdot (t^2-t_0^2)+v_0\cdot (t-t_0)+x_0.$$ -Remarque +.# +#### Remarque {-} La solution du problème différentiel peut également se calculer de la façon suivante $$x''(t)=a,\ x(t_0)=x_0,\ v(t_0)=v_0.$$ revient à @@ -115,9 +115,14 @@ Pour nous en convaincre faisons l’exercice suivant. Reprenons l’@eq:comp que $$n(t_0+2\delta t)=n(t_1+\delta t)=(1+r\delta t) n(t_1)=(1+r \delta t)(1+r \delta t) n(t_0)=(1+r\delta t)^2 n(t_0).$$ Si à présent nous comparons les résultats obtenus pour $\delta t_1=2\delta t$ dans l’@eq:evolpop on a -$$\begin{aligned} +$$ +\begin{aligned} n_1&=(1+r\delta t)^2 n(t_0)=(1+2r\delta t+(r\delta t)^2) n(t_0),\\ - n_2&=(1+2r\delta t) n(t_0).\end{aligned}$$ On trouve donc finalement + n_2&=(1+2r\delta t) n(t_0). +\end{aligned} +$$ + +On trouve donc finalement que $n_2-n_1=(r\delta t)^2n(t_0)$. On a donc que la différence tend bien vers 0 quand $\delta t$ tend vers 0. @@ -172,15 +177,12 @@ $k_g$. Finalement le terme $(4)$ est la reproduction des guépards proportionnelle au nombre d’antilopes avec un taux $k_{a,g}$. Nous avons à faire ici à un système d’équations différentielles. Nous -n’allons pas nous intéresser aux détails de larésolution de ce système mais +n’allons pas nous intéresser aux détails de la résolution de ce système mais simplement étudier le comportement de la solution (voir la @fig:lkA et @fig:lkB). -<div id="fig:lk"> {#fig:lkA width="50%"} -{#fig:lkB width=50%} -Deux représentation du système de Lotka--Volterra. -</div> +{#fig:lkB width=50%} #### Circuits électriques: le circuit RC @@ -255,7 +257,7 @@ ans.](figs/interets.svg){#fig:interets width="50.00000%"} Définitions et théorèmes principaux ----------------------------------- -Définition (Équation différentielle ordinaire) +.# +#### Définition (Équation différentielle ordinaire) {-} Soit $y$ une fonction dérivable $n$ fois et dépendant d’une seule variable. Une **équation différentielle ordinaire** est un équation de @@ -265,7 +267,7 @@ $n$-ème de $y$. --- -Illustation +.# +#### Illustration {-} L’équation suivante est une équation différentielle ordinaire $$y''+4y'+8y+3x^2+9=0.$$ @@ -279,18 +281,18 @@ différentielle. Afin de classifier les équation différentielles, considérons les définitions suivantes -Définition (Ordre) +.# +#### Définition (Ordre) {-} L’ordre d’une équation différentielle est l’ordre le plus haut des dérivées de $y$ qui y apparaissent. L’ordre de l’équation différentielle $F(x,y,y',y'',...,y^{(n)})=0$ est de $n$, si $n\neq 0$. -Illustration +.# +#### Illustration {-} L’équation différentielle suivante est d’ordre $3$ $$4y'''+x\cdot y'+4y+6x=0.$$ -Définition (Condition initiale) +.# +#### Définition (Condition initiale) {-} Une condition initiale pour une équation différentielle d’ordre $n$, est un ensemble de valeurs, $y_0$, $y_1$, ..., $y_{n-1}$ donnée telles que @@ -305,7 +307,7 @@ version approximative et la discuter --- -Théorème (Existence et unicité) +.# +#### Théorème (Existence et unicité) {-} Soit $D\subseteq{\real}$ le domaine de définition de la fonction $y$. Soit $y:D\rightarrow E\subseteq {\real}$ une fonction à valeur @@ -343,7 +345,7 @@ peu les équations différentielles en fonction des propriétés de $F$. --- -Définition (Linéarité) +.# +#### Définition (Linéarité) {-} Une équation différentielle ordinaire d’ordre $n$ est dite linéaire si on peut l’écrire sous la forme @@ -360,19 +362,19 @@ L’équation ci-dessus a les propriétés suivantes 2. Les $y$ et toutes leur dérivées ont un degré polynomial de 1. -Illustration +.# +#### Illustration {-} L’équation suivante est linéaire $$y''+4x\cdot y'=e^x.$$ L’équation suivante n’est pas linéaire $$y\cdot y''+4x\cdot y'=e^x.$$ -Définition (Homogénéité) +.# +#### Définition (Homogénéité) {-} Une équation différentielle ordinaire est dite homogène si le terme dépendant uniquement de $x$ est nul. Dans le cas où nous avons à faire à une équation différentielle linéaire, cela revient à dire que $b(x)=0$. -Illustration (Homogénéité) +.# +#### Illustration (Homogénéité) {-} Les équations suivantes sont homogènes $$\begin{aligned} &y''+4x\cdot y\cdot y'+3x^2\cdot y^3=0,\\ @@ -385,7 +387,7 @@ $$\begin{aligned} --- -Exercice (Homogénéité) +.# +#### Exercice (Homogénéité) {-} Pour chacune de ces équations différentielles ordinaires donner tous les qualificatifs possibles. Si l’équation est inhomogène @@ -399,7 +401,7 @@ donner l’équation homogène associée. $$\begin{aligned} --- -La solution des équations différencielles inhomogènes se +La solution des équations différentielles inhomogènes se trouve de la façon suivante. 1. Trouver la solution générale de l’équation différentielle homogène associée, @@ -423,7 +425,7 @@ un certain nombre. --- -Définition (Équations à variable séparables) +.# +#### Définition (Équations à variable séparables) {-} On dit qu’une équation différentielle d’ordre 1 est à variables séparables, si elle peut s’écrire sous la forme suivante @@ -433,7 +435,7 @@ $$y' a(y)=b(x).$$ --- -Illustration +.# +#### Illustration {-} L’équation suivante est à variables séparables $$e^{x^2+y^2(x)}y'(x)=1.$$ @@ -453,11 +455,11 @@ $a(y)=1$ et il vient $$y=\int b(x){\mathrm{d}}x.$$ --- -Exemple +.# +#### Exemple {-} Résoudre l’équation différentielle suivante $$n'(t)=r\cdot n(t).$$ -Solution +.# +#### Solution {-} En écrivant $n'={\mathrm{d}}n /{\mathrm{d}}t$, on réécrit l’équation @@ -472,7 +474,7 @@ n(t)&=e^{r\cdot t+C}=A\cdot e^{r\cdot t},\end{aligned}$$ où $A=e^C$. --- -Exercice +.# +#### Exercice {-} 1. Résoudre l’équation différentielle suivante $$c'(t)=rc(t)+d.$$ @@ -518,18 +520,18 @@ dans l'@eq:lin, on obtient $$\begin{aligned} \end{aligned}$$ Il nous reste donc à résoudre cette équation différentielle pour $C(x)$ qui est une équation à variables séparables où on aurait un $a(c)=1$. On intègre donc directement cette équation -pour obtienir +pour obtenir $$C(x)=\int \frac{b(x)}{e^{\int a(x){\mathrm{d}}x}}{\mathrm{d}}x.$$ Finalement, on a que la solution de l’équation générale de l’équation inhomogène est $$y=y_p+y_h=\left(\int \frac{b(x)}{e^{\int a(x){\mathrm{d}}x}}{\mathrm{d}}x+C\right)e^{\int a(x){\mathrm{d}}x}.$$ -Exemple +.# +#### Exemple {-} Résoudre l’équation suivante $$U_C'(t)+\frac{U_C(t)}{RC}=\frac{U}{RC}.$${#eq:rc_inhom} -Solution +.# +#### Solution {-} On commence par résoudre l’équation homogène @@ -546,18 +548,18 @@ $U_c(0)=0$. On peut donc fixer la constante $C=-U$. Résoudre les équations différentielles suivantes -Exercice +.# +#### Exercice {-} 1. $$y'+2y=t^2$$ 2. $$y'+y=\frac{1}{1+e^t}.$$ -### Équations de Bernouilli +### Équations de Bernoulli Il existe des équations particulières qui peuvent se ramener à des équations linéaires via des changements de variables. -Une classe particulière sont les équations de Bernouilli, qui s’écrit +Une classe particulière sont les équations de Bernoulli, qui s’écrit $$y'(x)+a(x)\cdot y(x)+b(x)\cdot y^n(x)=0,$${#eq:bernouilli} où $r\in{\real}$. @@ -567,16 +569,16 @@ $$\frac{y'(x)}{y^n(x)}+\frac{a(x)}{y^{n-1}(x)}+b(x)=0.$${#eq:bernouilli_2} Dans ce cas là , en effectuant le changement de variable suivant $$z=y^{1-n},$$ on obtient (exercice) $$z'(x)+(1-n)a(x)\cdot z(x)+(1-n)b(x)=0.$$ On a donc ramené l’équation -de Bernouilli à une équation linéaire que nous savons résoudre à l’aide +de Bernoulli à une équation linéaire que nous savons résoudre à l’aide de la méthode de la section @sec:eq_lin. --- -Exemple +.# +#### Exemple {-} -Résoudre l’équation de Bernouilli suivante $$y'-y-x\cdot y^6=0.$$ +Résoudre l’équation de Bernoulli suivante $$y'-y-x\cdot y^6=0.$$ -Solution +.# +#### Solution {-} Avec la substitution $z=y^5$, on obtient $$z'-5z+5x=0.$$ Cette équation se @@ -596,7 +598,7 @@ $y=z^{1/5}$ et on a $$y=\left(Ae^{5x}+x+\frac{1}{5}\right)^{1/5}.$$ L’équation de Riccati qui est de la forme $$y'(x)+a(x)+b(x)\cdot y(x)+c(x)\cdot y^2(x)=0,$${#eq:riccati} et est donc quadratique en $y$. On notera que c’est une équation de -Bernouilli (avec $n=2$ et qui est inhomogène). +Bernoulli (avec $n=2$ et qui est inhomogène). Cette équation a une propriété intéressante. Si nous connaissons une solution particulière à l’équation inhomogène, notons la $y_p$, alors la @@ -607,12 +609,12 @@ ce-dessus devient donc $$y_p'+y_h'+a(x)+b(x)\cdot y_p+b(x)\cdot y_h+c(x)\cdot (y_p^2+2y_p(x)y_h(x)+y_h^2)=0.$$ En utilisant que $y_p$ est solution de l’équation de Riccati, on a $$y_h'+a(x)+(b(x)+2y_p(x)c(x))\cdot y_h+c(x)\cdot y_h^2=0.$$ Cette -équation est une équation de Bernouilli avec $n=2$. On sait donc comment +équation est une équation de Bernoulli avec $n=2$. On sait donc comment la résoudre. -- -Exercice +.# +#### Exercice {-} Résoudre l’équation de Riccati suivante $$y'+y^2-\frac{2}{x^2}=0.$$ Indication: la solution particulière a la forme $y=\frac{a}{x}$, avec @@ -658,7 +660,7 @@ l’équation différentielle. --- -Propriétés +.# +#### Propriétés {-} Ces propriétés (qui caractérisent le mot "linéaires") sont à démontrer en exercice. @@ -689,7 +691,7 @@ deux lignes. La seconde ligne ci-dessus, s’appelle le polynôme caractéristique de notre EDO d’ordre 2. Il nous reste à présent à déterminer $\lambda$ ce qui est un simple -problème d’algèbre. Le polynome ci-dessus se factorise simplement en +problème d’algèbre. Le polynôme ci-dessus se factorise simplement en $$(\lambda+1)(\lambda+2)=0,$$ on a donc pour solution $\lambda=-1$, et $\lambda=-2$. @@ -697,7 +699,7 @@ On a donc immédiatement deux solutions à notre équation différentielle $$y_1(x)=e^{-x},\quad y_2(x)=e^{-2x}.$$ On vérifie aisément que ces deux équations vérifient l'@eq:edo2_ex. Précédemment, nous avons vu que la linéarité de ces équations différentielles, faisait -qu’on pouvait contrsuire des solutions plus générales. En effet, on peut +qu’on pouvait construire des solutions plus générales. En effet, on peut montrer que la solution la plus générale à cette EDO est $$y(x)=C_1 y_1(x)+C_2y_2(x)=C_1e^{-x}+C_2e^{-2x}.$$ On constate qu’il y a deux constantes à déterminer pour avoir une solution unique. Pour ce @@ -711,7 +713,7 @@ $$y(x)=2e^{-x}-e^{-2x}.$$ A présent, nous pouvons généraliser cette méthode pour l’équation @eq:edo2_cch $$a y''(x)+by'(x)+cy(x)=0.$$ En faisans la même -subsitution que précédemment, $y=e^{\lambda x}$, on a $$\begin{aligned} +substitution que précédemment, $y=e^{\lambda x}$, on a $$\begin{aligned} &a \lambda^2e^{\lambda x}+b\lambda e^{\lambda x} +ce^{\lambda x}=0,\\ &a \lambda^2+\lambda b+c=0.\end{aligned}$$ L’équation ci-dessus doit être résolue pour $\lambda$. Nous savons comment résoudre ce genre @@ -727,7 +729,7 @@ $\Delta < 0$. #### Le cas $\Delta>0$ Dans ce cas, on a que $\lambda_1,\lambda_2\in{\real}$ sont réels. -La solution est donc donnée par (comme on l’a vu au paravant) +La solution est donc donnée par (comme on l’a vu au paravent) $$y(x)=C_1e^{\lambda_1 x}+C_2e^{\lambda_2 x}.$$ #### Le cas $\Delta=0$ @@ -740,7 +742,7 @@ satisfaire deux conditions initiales comme nous avons vu précédemment. Il fau donc travailler un peu plus. Supposons que $y(x)$ est donné par la fonction suivante $$y(x)=z(x)e^{\lambda x},$$ avec $z(x)$ une fonction réelle. En substituant cela dans l’équation générale, on a -$$az''+(2\lambda a+b)z'+(a\lambda^2+b\lambda+c)z=0.$$ En utilant que +$$az''+(2\lambda a+b)z'+(a\lambda^2+b\lambda+c)z=0.$$ En utilisant que $\lambda=-b/(2a)$ et $\Delta =0$ il vient $$z''=0.$$ La solution de cette équation est $$z=C_1+xC_2.$$ On obtient donc comme solution générale de l’équation différentielle $$y(x)=(C_1+C_2 x)e^{\lambda x}.$$ @@ -772,7 +774,7 @@ l'@eq:sol2 comme $$\begin{aligned} &=e^{ux}\left(C_3\cos(vx)+C_4\sin(vx))\right),\end{aligned}$$ où on a définit $C_3\equiv C_1+C_2$ et $C_4\equiv i(C_1-C_2)$. -Résoudre les EDO d’ordre 2 à coefficiens constants suivantes: +Résoudre les EDO d’ordre 2 à coefficients constants suivantes: 1. $y''+y'+y=0$, @@ -904,7 +906,7 @@ $n=0$ $$\begin{aligned} x(t_{1})&=x(t_0)+\delta t v(t_0)+\frac{1}{2}\delta t^2 a(x(t_0)),\nonumber\\ x(t_{1})&=x_0+\delta t v_0+\frac{1}{2}\delta t^2 a(x_0),\end{aligned}$$ où $x_0$ et $v_0$ sont les conditions initiales de notre problème. -Esuite les itérations suivantes ($n>0$) sont calculables directement +Ensuite les itérations suivantes ($n>0$) sont calculables directement avec l'@eq:verlet_novel. Un autre avantage considérable de ce modèle est qu’il est très simple d’y inclure une force de frottement proportionnelle à la vitesse. Sans entrer dans les diff --git a/05_fourier.md b/05_fourier.md index 383037749301ed50ea6c01a3dbfb9a5edb202428..7c4308829237a10cc0571baaf04b46c958658a3d 100644 --- a/05_fourier.md +++ b/05_fourier.md @@ -48,7 +48,7 @@ vérifier la commutativité $$\begin{aligned} (a,b)\cdot(c,d)&=(a\cdot c-b\cdot d,a\cdot d+b\cdot c)\nonumber\\ &=(c\cdot a-d\cdot b,d\cdot a+c\cdot b)=(c,d)\cdot (a,b).\end{aligned}$$ -Exercice +.# +#### Exercice {-} Vérifier l’associativité du produit sur notre ensemble ${\real}^2$. @@ -105,7 +105,7 @@ sur un plan bidimensionnel (voir la @fig:complexPlane). {#fig:complexPlane width="35.00000%"} -La somme de deux nombres complexes s’interprête également facilement de +La somme de deux nombres complexes s’interprète également facilement de façon graphique. On peut le voir sur la @fig:complexPlaneSum. Il s’agit en fait de simplement faire la somme des vecteurs représentant chacun des nombres complexes à sommer. @@ -186,7 +186,7 @@ $${\mathrm{Re}}(z)=\frac{1}{2}(z+{\bar{z}}),\quad {\mathrm{Im}}(z)=\frac{1}{2i}( --- -Exercice +.# +#### Exercice {-} Démontrer ces trois relations. @@ -199,7 +199,7 @@ $$\begin{aligned} --- -Exercice +.# +#### Exercice {-} Démontrer ces relations. @@ -213,7 +213,7 @@ allons considérer un ensemble $V$ muni d’une addition et d’une multiplicati à un ensemble $E$. Dans notre cas $E$ sera ${\real}$ ou ${\mathbb{C}}$ (l'ensemble des nombres complexes) principalement. -Définition +.# +#### Définition {-} On appelle espace vectoriel sur $E$, un ensemble $V$, dont les éléments appelés vecteurs et notés $v$, sont sont munis des opérations @@ -245,7 +245,7 @@ propriétés suivantes $1$, pour la multiplication à gauche $$1 \cdot v=v.$$ -Exemple (Espaces vectoriels) +.# +#### Exemple (Espaces vectoriels) {-} 1. L’espace nul, $v=0$. @@ -255,7 +255,7 @@ Exemple (Espaces vectoriels) +.# 3. Espaces de $n-uplets$. Soit $V$ un espace vectoriel sur $E$.L’espace des $n-$uplets. Pour t$n>0$, l’ensemble des $n-$uplets d’éléments de $V$, $v=(v_1,v_2,...,v_n),\ \{v_i\in E\}_1^n$, est noté $V^n$. Sur cet espace l’addition se définit ($u,v\in V^n$) - $$u+v=(u_1+v_1,u_2+v_2,...,u_v+v_n),$$ et la mutliplication par un + $$u+v=(u_1+v_1,u_2+v_2,...,u_v+v_n),$$ et la multiplication par un scalaire $\alpha\in E$ $$\alpha v=(\alpha v_1,\alpha v_2,...,\alpha v_n).$$ On a donc que l’élément neutre de l’addition est le vecteur @@ -273,7 +273,7 @@ Exemple (Espaces vectoriels) +.# jusqu’ici. Il s’agit de l’espace des fonctions, ou espace fonctionnel. Nous définissons les applications de $W$ dans $V$ comme un espace vectoriel dans $E$ avec l’addition et la multiplication - par un scalaire définis commme suit. Soient $f:W\rightarrow V$ et + par un scalaire définis comme suit. Soient $f:W\rightarrow V$ et $g:W\rightarrow V$, avec $\alpha\in E$, alors $$\begin{aligned} &(f+g)(x)=f(x)+g(x), \quad \forall x\in W,\\ &(\alpha\cdot f)(x)=\alpha\cdot f(x), \quad \forall x\in W. @@ -321,7 +321,7 @@ $$w=u+v=u_1\cdot e_1+u_2\cdot e_2+v_1\cdot e_1+v_2\cdot e_2=(u_1+v_1)\cdot e_1+( --- -Illustration (Exemples de bases d'espaces vectoriels) +.# +#### Illustration (Exemples de bases d'espaces vectoriels) {-} 1. Pour l’espace des fonctions polynomiales $f(x)=\sum_{i=0}^Na_ix^i$ les fonction $e_i=x^i$ forment une base. @@ -336,13 +336,13 @@ Plus formellement nous allons introduire un certain nombre de concepts mathématiques pour définir une base. Considérons toujours $V$ un espace vectoriel sur $E$. -Définition (Famille libre) +.# +#### Définition (Famille libre) {-} Soient $\{\alpha_i\}_{i=1}^n\in E$. On dit qu’un ensemble de vecteurs $\{v_i\}_{i=1}^n\in V$ est une famille libre si $$\sum_{i=1}^n \alpha_iv_i=0 \Rightarrow \alpha_i=0,\ \forall i.$$ -Exemple (Famille libre) +.# +#### Exemple (Famille libre) {-} 1. $\{e_1\}$ est une famille libre de ${\real}^2$. @@ -357,7 +357,7 @@ Exemple (Famille libre) +.# relie les deux. La relation est non-linéaire $\sin(x)=\sqrt{1-\cos^2(x)}$. -Définition (Famille génératrice) +.# +#### Définition (Famille génératrice) {-} On dit qu’un ensemble de vecteurs $\{e_i\}_{i=1}^n\in V$ est une famille génératrice si @@ -365,7 +365,7 @@ $$\forall\ v\in V,\quad \exists \{\alpha_i\}_{i=1}^n\in E,\quad \mbox{t.q.}\quad En d’autres termes, tout $v\in V$ peut s’exprimer comme une combinaison linéaire des vecteur $e_i$. -Illustration (Familles génératrices) +.# +#### Illustration (Familles génératrices) {-} 1. $\{e_1\}$ n’est pas une famille génératrice de ${\real}^2$. On ne peut pas représenter les vecteurs de la forme $v=(0,v_2)$, @@ -376,7 +376,7 @@ Illustration (Familles génératrices) +.# 3. $\{e_1,e_2,v\}$, avec $v=(1,1)$ est une famille génératrice de ${\real}^2$. -Définition (Base) +.# +#### Définition (Base) {-} Un ensemble de vecteurs $B=\{e_i\}_{i=1}^n$ forme une base si c’est une famille génératrice et une famille libre. En d’autres termes cela @@ -386,7 +386,7 @@ est unique $$\forall v\in V, \quad !\exists \{\alpha_i\}_{i=1}^n\in E,\quad t.q.\quad v=\sum_{i=1}^n\alpha_i v_i.$$ Les $\alpha_i$ sont appelé les coordonnées de $v$ dans la base $B$. -Illustration (Base de $\real ^2$) +.# +#### Illustration (Base de $\real ^2$) {-} 1. $\{e_1,e_2\}$ est une base de ${\real}^2$. @@ -519,7 +519,7 @@ $$\begin{aligned} \cos\theta\cos\phi&= \frac{1}{2}\left(\cos(\theta-\phi)+\cos(\theta+\phi)\right),\\ \sin\theta\cos\phi&= \frac{1}{2}\left(\sin(\theta+\phi)+\sin(\theta-\phi)\right).\end{aligned}$$ -Cela est dû à la propriété d’othorgonalité des fonctions sinus/cosinus. +Cela est dû à la propriété d’orthogonalité des fonctions sinus/cosinus. En multipliant l'@eq:decomp_sincos par $\frac{2}{T}\sin(k \omega t)$ et en intégrant entre $0$ et $T$, on obtient $$\begin{aligned} @@ -613,7 +613,7 @@ pouvoir calculer sa transformée de Fourier: --- -Exercice +.# +#### Exercice {-} Calculer les transformées de Fourier des fonctions suivantes @@ -634,7 +634,7 @@ Calculer les transformées de Fourier des fonctions suivantes --- -Exercice +.# +#### Exercice {-} Calculer les transformées de Fourier inverse de la fonction suivante @@ -649,7 +649,7 @@ Calculer les transformées de Fourier inverse de la fonction suivante La transformée de Fourier possède plusieurs propriétés intéressantes. -Propriété +.# +#### Propriété {-} 1. Linéarité. Soit une fonction $h(t)=af(t)+bg(t)$, alors sa transformée de Fourier est donnée par @@ -709,7 +709,7 @@ l’intégrale et on a $$\begin{aligned} &=f[n].\nonumber\end{aligned}$$ -Exercice +.# +#### Exercice {-} Calculer les transformées de Fourier (inverses quand c’est approprié) en temps discret des fonctions suivantes @@ -793,10 +793,10 @@ redondante... L’idée à présent va être d’enlever toute l’information redondante de ${\hat{f}}(\omega)$ en échantillonnant ${\hat{f}}$ et en gardant uniquement $N$ échantillons de ${\hat{f}}$. La fréquence -d’échantillonage sera de $2\pi/N$ et le domaine d’échantillonage sera +d’échantillonnage sera de $2\pi/N$ et le domaine d’échantillonnage sera $[-\pi,\pi)$. -Nous pouvons à présent définir mathématiquement cet échantillonage de +Nous pouvons à présent définir mathématiquement cet échantillonnage de ${\hat{f}}(\omega)$ comme étant une suite de points, notée $\{{\hat{f}}(\omega_k)\}_{k=0}^{N-1}$, où $\omega_k=2\pi k/N$. Cette suite sera notée ${\hat{f}}[k]$ et appelée la *transformée de Fourier @@ -868,7 +868,7 @@ réduisent la complexité algorithmique à $N\log(N)$ en général. Nous allons brièvement discuter un de ces algorithmes dans la sous-section @sec:tfr. -La transformée de Fourier discrète étant un échantillonage de la +La transformée de Fourier discrète étant un échantillonnage de la transformée de Fourier à temps discret, toutes les propriétés discutées pour la transformée de Fourier à temps discret restent valides. En particulier la transformée de Fourier discrète est périodique, de @@ -876,7 +876,7 @@ période $N$ $${\hat{f}}[k]={\hat{f}}[k+N].$$ --- -Exercice +.# +#### Exercice {-} A démontrer en exercice. @@ -887,7 +887,7 @@ A démontrer en exercice. L’algorithme présenté ici est une version “simplifiée†de l’algorithme de Cooley-Tukey (publié en 1965). Cet algorithme a en fait été “inventé†par Gauss en 1805 quand il essayait d’interpoler la trajectoires -d’astéroides dans le système solaire. +d’astéroïdes dans le système solaire. L’idée de l’algorithme radix-2 est d’abord de séparer le signal en deux parties. D’une part les indices pairs et d’autres part les indices @@ -928,11 +928,11 @@ continuant cette procédure jusqu’à $N=2$ on peut montrer qu’on réduit la complexité algorithmique à $N\log N$ (mais on ne le démontrera pas dans ce cours). -### Fréquence d’échantillonage +### Fréquence d’échantillonnage Une question primordiale dans le calcul des transformée de Fourier (ou de l’analyse spectrale plus généralement) est la question de -l’échantillonage du signal que nous souhaitons analyser. Dans le monde +l’échantillonnage du signal que nous souhaitons analyser. Dans le monde réel un signal sonore, une image,... est considéré comme une quantité continue (il est représentée par une infinité de valeur). Lorsque nous souhaitons faire une analyse spectrale sur un ordinateur de ce signal, @@ -958,10 +958,10 @@ alors on doit l’échantillonner avec une fréquence $1/\delta t_e=F_e\geq 2F_c$. De façon similaire, si on choisit un signal et qu’on peut l’échantillonner avec une certaine précision (on détermine la fréquence maximale, $F_c$ qu’on veut pouvoir représenter dans le -signal) on a simplement besoin de choisir une fréquence d’échantillonage +signal) on a simplement besoin de choisir une fréquence d’échantillonnage $F_e\geq 2F_c$. Nous notons $F_N=2F_c$ la fréquence de Nyquist. En -prenant $F_e=F_N$ on a que $N=1/F_e=1/F_N$ et que l’échantillonage +prenant $F_e=F_N$ on a que $N=1/F_e=1/F_N$ et que l’échantillonnage permet de représenter les fréquences plus petites que $F_N/2$. Si la -fréquence d’échantillonage est plus petite que la fréquence de Nyquist +fréquence d’échantillonnage est plus petite que la fréquence de Nyquist de notre signal, on verra apparaître le phénomène de *repliement de spectre* (aliasing en anglais). diff --git a/06_probas_stats.md b/06_probas_stats.md index f1ef4d9a5d943544d2a898dc0c526d34f7f2c3c1..5373a18946a169ff75bc056bf623c69f78bbcdc8 100644 --- a/06_probas_stats.md +++ b/06_probas_stats.md @@ -1,8 +1,6 @@ -Probabilités et statistiques -============================ +# Probabilités et statistiques -Introduction à la statistique descriptive ------------------------------------------ +## Introduction à la statistique descriptive En statistique, une *population* est un ensemble d’objets (d’individus) possédant un ou plusieurs *caractères* communs. L’étude des caractères @@ -41,7 +39,7 @@ l’ensemble des valeurs possibles pour le dit caractère. --- -Illustration +.# +#### Illustration {-} 1. Cas discret: On étudie la distribution de salaires annuels dans une entreprise. Les salaires possibles sont $40'000$, $50'000$, $60'000$ @@ -73,7 +71,7 @@ Illustration +.# Pour représenter de façon un peu plus parlante ces valeurs, deux méthodes principales existent: le tableau ou le graphique. Pour illustrer les exemples précédents sous forme de tableau on obtient pour -le cas des salaires (voir Tabl. @fig:salaires) +le cas des salaires (voir Tabl. @tbl:salaires) Salaire Nombre de salariés --------- -------------------- @@ -84,7 +82,7 @@ le cas des salaires (voir Tabl. @fig:salaires) : Tableau du nombre de salariés par salaire. {#tbl:salaires} -et du benchmark de l’application (voir Tabl. @fig:exec) +et du benchmark de l’application (voir Tabl. @tbl:exec) Temps d’exécution Nombre ------------------- -------- @@ -122,7 +120,7 @@ $$f_i=\frac{n_i}{n}.$$ --- -Exemple (Fréqunces) +.# +#### Exemple (Fréquences) {-} Les tableaux de fréquence des deux exemples précédents sont donnés par @@ -157,7 +155,7 @@ retrouverons dans les sections suivantes qui sont assez intuitives --- -Propriété (Propriétés de la fréquence) +.# +#### Propriété (Propriétés de la fréquence) {-} 1. Les fréquences sont toujours dans l’intervalle $[0,1]$ $$0\leq f_i\leq 1.$$ @@ -192,7 +190,7 @@ tableaux @tbl:salaires et @tbl:exec (voir le : Tableau des temps d'exécution et la fréquence et fréquences cumulées des temps d'exécution. {#tbl:exec_freqcum} -Exercice (Fréquence cumulée) +.# +#### Exercice (Fréquence cumulée) {-} 1. Tracer les graphes de la fréquence cumulée pour les deux exemples que nous avons vus. @@ -216,7 +214,7 @@ $$\bar{x}=\sum_{i=0}^{k-1}f_i\cdot x_i.$$ --- -Exercice (Propriétés de la moyenne) +.# +#### Exercice (Propriétés de la moyenne) {-} 1. Démontrer la relation précédente. @@ -226,7 +224,7 @@ Exercice (Propriétés de la moyenne) +.# --- -Illustration (Moyenne) +.# +#### Illustration (Moyenne) {-} Pour l’exemple des salaires la moyenne est donnée par $$\bar{x}_{\textrm{salaire}}=\frac{35\cdot40000+20\cdot50000+5\cdot60000+1\cdot1000000}{61}=60656.$$ @@ -254,7 +252,7 @@ le reste est telle que $x_i\geq\tilde{x}$. Pour l’exemple des salaires le salaire médian est de $40000 CHF$, ce qui reflète beaucoup mieux la distribution des salaire de notre population. -Exercice (Moyenne, médiane) +.# +#### Exercice (Moyenne, médiane) {-} Calculer la moyenne et la médiane pour l’exemple du temps d’exécution (prendre la borne inférieure des intervalles pour chaque temps @@ -284,7 +282,7 @@ $$s=\sqrt{v}.$$ --- -Exercice (Variance, écart-type) +.# +#### Exercice (Variance, écart-type) {-} Démontrer les relations suivantes @@ -305,7 +303,7 @@ $$s=\sqrt{v}=121440.$$ --- -Exercice (Variance, écart-type) +.# +#### Exercice (Variance, écart-type) {-} Calculer la variance et l’écart type à partir des valeurs du benchmark de l’application. @@ -333,7 +331,7 @@ semi-inter-quartile. --- -Exercice (Semi-inter quartile) +.# +#### Exercice (Semi-inter quartile) {-} Calculer les intervalles semi-inter-quartiles des exemples que nous avons vus plus tôt dans le cours. @@ -353,7 +351,7 @@ sera utile pour la suite. --- -Définition +.# +#### Définition {-} - L’ensemble des résultats possibles du lancer de dé est $\Omega=\{1,2,3,4,5,6\}$ et cet ensemble est appelé l’*univers* du @@ -387,7 +385,7 @@ $\Omega$ se réalisent $$\begin{aligned} f(B)&=\frac{M}{N},\\ f(\Omega)&=\frac{N}{N}=1,\\ f(A\cup B)&=\frac{M+K}{N}=f(A)+f(B).\end{aligned}$$ Les *probabilités* -de réalisation des événements ci-dessus peutvent être vues comme le +de réalisation des événements ci-dessus peuvent être vues comme le passage à la limite $N\rightarrow\infty$ tel que $p(A),p(B)\in{\real}$ et $$\begin{aligned} p(A)&=\lim_{\substack{N\rightarrow\infty,\\ K/N<\infty}}\frac{K}{N},\\ @@ -426,7 +424,7 @@ la probabilité de tirer un nombre impair, est donnée par $1$ moins la probabilité de réaliser l’événement pair $$p(\{1,3,5\})=1-p(\{2,4,6\})=\frac{1}{2}.$$ -### Evénements disjoints {#sec:disjoints} +### Événements disjoints {#sec:disjoints} Considérons maintenant deux événements, $A=\{1,2\}$ et $B=\{3,4,5\}$. Comme $A$ et $B$ n’ont pas d’éléments en commun, on dit que c’est deux @@ -460,7 +458,7 @@ $$p(A)=p(\{1\})+p(\{2\})=\frac{1}{6}+\frac{1}{6}=\frac{2}{6}=\frac{1}{3}.$$ On a que la probabilité de réaliser un événement est la somme des événements élémentaires qui le composent. -### Evénements complémentaires +### Événements complémentaires Considérons de nouveau l’événement $A=\{1,2\}$ et cette fois l’événement $B=\Omega\backslash \{1,2\}=\{3,4,5,6\}$. L’événement $B$ est appelé @@ -476,7 +474,7 @@ $$p(B)=\frac{\mbox{nombre d'éléments dans }B}{\mbox{nombre d'éléments dans } Ce résultat est très important car on calcule facilement $p(\bar A)$ si on connaît $p(A)$. -### Evénements non-disjoints +### Événements non-disjoints Considérons de nouveau l’événement $A=\{1,2\}$ et cette fois $B=\{2,3,4,5\}$. Les probabilités de réaliser les événements respectifs @@ -502,12 +500,12 @@ $$p(A\cup B)=p(A)+p(B)-p(A\cap B)=p(A)+p(B)-p(\emptyset)=p(A)+p(B).$$ ### Axiomes des probabilités -Tous ces concepts que nous avons vus précédemments peuvent être vus +Tous ces concepts que nous avons vus précédemment peuvent être vus comme la conséquences des trois axiomes des probabilités suivants --- -Définition (Axiomes des probabilités) +.# +#### Définition (Axiomes des probabilités) {-} Soit $\Omega$ un univers. La probabilité de réaliser un événement $A\subseteq\Omega$ est une fonction $p(A)$ qui @@ -520,7 +518,7 @@ axiomes suivants 3. Soit $B\subseteq\Omega$. Si $A\cap B=\emptyset$, alors $$p(A\cup B)=p(A)+p(B).$$ La probabilité de réalisation de deux - évéenements incompatibles est égale à la somme de réalisation de + événements incompatibles est égale à la somme de réalisation de chacun d’entre eux. --- @@ -529,7 +527,7 @@ De ces axiomes découlent tout un tas de théorèmes --- -Théorème +.# +#### Théorème {-} Pour $A,B\subseteq\Omega$ et $\Omega$ un univers et $p$ une probabilité. @@ -585,7 +583,7 @@ $p(A|B)$, tel que $$p(A|B)=\frac{p(A\cap B)}{p(B)}.$$ --- -Exercice (Probabilités conditionnelles) +.# +#### Exercice (Probabilités conditionnelles) {-} Sur une population de 1000 hommes qui naissent, 922 atteignent l’âge de 50 ans et 665 l’âge de 70 ans. @@ -601,7 +599,7 @@ Sur une population de 1000 hommes qui naissent, 922 atteignent l’âge de --- -### Evénements indépendants +### Événements indépendants Prenons maintenant le cas “pathologique†où nous cherchons la probabilité conditionnelle $p(A|B)$, mais où la réalisation de $B$ n’a @@ -622,18 +620,18 @@ $A$ soit “tirer un 6 au premier tirage†et que l’événement $B$ soit $$p(A)=\frac{1}{6},\quad p(B)=\frac{1}{6},\quad p(A\cap B)=\frac{1}{36}.$$ On a donc bien $p(A\cap B)=p(A)\cdot p(B)$ et les événements sont indépendants. Cela semble bien naturel étant donné que le premier tirage -du dé ne va en rien influencer le résultat du deuxieme tirage. Tout +du dé ne va en rien influencer le résultat du deuxième tirage. Tout comme un tirage de l’euromillions d’une semaine ne va pas influencer le résultat de celui de la semaine suivante. --- -Exercice (Evénements indépendants) +.# +#### Exercice (Événements indépendants) {-} On jette une pièce de monnaie deux fois de suite. Les résultats possible pour chaque jet sont: $P$, ou $F$. -1. Ecrivez l’univers des événements. +1. Écrivez l’univers des événements. 2. Calculez les probabilités des événements $A$ “face au premier jetâ€, $B$ “pile au second jetâ€. @@ -677,7 +675,7 @@ Comme pour le cas à un tirage, tout tirage successif de dés est équiprobable et la probabilité de chaque tirage est de $1/36$. Une autre façon de calculer la probabilité d’obtenir $A=\{26\}$ est de -constater que la probabilié d’obtenir ce tirage succesif est la +constater que la probabilité d’obtenir ce tirage successif est la probabilité de tirer $2$, puis la probabilité de tirer $6$. La probabilité de cet enchaînement est obtenu en multipliant les événements élémentaires @@ -733,7 +731,7 @@ $1/6$. On a donc que $$p(A)=\frac{1}{3}\cdot \frac{1}{6}=\frac{1}{18}.$$ --- -Exercice +.# +#### Exercice {-} 1. Calculer la probabilité d’obtenir $2$ comme la somme des deux nombres tirés par deux dés. @@ -758,7 +756,7 @@ Exercice +.# ### La distribution multinomiale -Plus nous allon rajouter des tirages successifs plus il va être +Plus nous allons rajouter des tirages successifs plus il va être compliqué de calculer les probabilités de tirer une certaine combinaison de nombres. Il existe néanmoins une formule qui généralise les tirages successifs avec remise. Prenons le cas où nous avons un dé qui ne donne @@ -805,7 +803,7 @@ $$p([n_1,...,n_k])=\frac{n!}{n_1!\cdots n_k!}p_1^{n_1}\cdots p_k^{n_k}.$$ --- -Exercice +.# +#### Exercice {-} On lance un dé parfait 10 fois. Quelle est la probabilité d’obtenir: @@ -874,7 +872,7 @@ $p(\{5,2\}\backslash \{2\mbox{ ou }5)=\frac{1}{5}$ pour trouver la probabilité --- -Exerice +.# +#### Exercice {-} 1. Le jeu Euromillions consiste en un tirage de 5 numéros parmi 50 possible, puis par le tirage de 2 “étoiles†parmi 11 possibles. @@ -986,7 +984,7 @@ Prenons ces trois questions une par une 1. Les deux façons d’obtenir $X=1$ est d’avoir les tirages $(p,f)$ ou $(f,p)$, soit $A=\{(p,f), (f,p)\}$. Les probabilités de chacun des - événements de l’univers étants équiprobables on a + événements de l’univers étant équiprobables on a $$p(X=1)=p(A)=1/2.$$ 2. Le seul événement donnant un $X$ qui n’est pas dans l’intervalle @@ -1004,7 +1002,7 @@ On peut noter dans le cas général qu’on a $D=X^{-1}(I)$. --- -Définition (Variable aléatoire) +.# +#### Définition (Variable aléatoire) {-} On dit que la fonction $X:\Omega\rightarrow{\real}$ est une *variable aléatoire* si la préimage de $X$ sur tout intervalle, @@ -1016,7 +1014,7 @@ probabilité de réaliser l’événement $A$ $$p(X\in I)=p(A).$$ --- -Définition (Fonction de répartition) +.# +#### Définition (Fonction de répartition) {-} On dit que la fonction $F:{\real}\rightarrow{\real}$ est une *fonction de répartition* si $F(x)=p(X\leq x)$ pour tout @@ -1049,7 +1047,7 @@ fonction `rand()` de $C$, $M$ est donné par la constante prédéfinie `RAND_MAX` qui and certains cas est $2^{31}-1$). La probabilité de tirer chacun des nombres dans l’intervalle $A$ est égale. On dit que la distribution des nombres est uniforme. De plus, les nombres tirés ne -doivent pas dépendre de l’histoire des nombres tirés précédemment et on dit que les nombres sont idépendants. +doivent pas dépendre de l’histoire des nombres tirés précédemment et on dit que les nombres sont indépendants. Si on veut maintenant plutôt tirer des nombres réels uniformément distribués entre $[0,1]$, il suffit de diviser les nombres $X_i$ par $m$ @@ -1145,7 +1143,7 @@ Bien que ne soyant pas parfaits ces générateurs ont aussi le grand avantage d’être très rapides et peu gourmands en ressources de calcul. La facilité de description et d’utilisation de tels générateurs, permet des tests très poussés quant à leur qualités et leurs limites par la -communauté scientifique. Finalement, les besoins de débuggage de codes, +communauté scientifique. Finalement, les besoins de débogage de codes, la reproductibilité d’une série de nombres aléatoires peut être d’un grand secours. @@ -1289,5 +1287,5 @@ expérimentalement pour $k$ de l’ordre de la période du générateur de nombres aléatoires. Des analyses théoriques sont dès lors primordiales, mais bien en dehors du champs de ce cours... -Il existe beaucoup d’autres possiblités (il y a des recommandations +Il existe beaucoup d’autres possibilités (il y a des recommandations sur le site `http://www.random.org`) pour tester des nombres aléatoires. diff --git a/Makefile b/Makefile index b5d4f18cba21adf4defccd93a11f8ebd087d25b9..1b12a289f5bde63b68d3f2147f933c1edc4a8720 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,6 @@ STYLES := css/tufte-css/tufte.css \ css/tufte-extra.css OPTIONS = --toc -OPTIONS += --filter=pandoc-numbering OPTIONS += --filter=pandoc-crossref PDFOPTIONS = --highlight-style kate @@ -23,10 +22,10 @@ all: cours.pdf cours.html # %.tex: %.md # pandoc -s $(OPTIONS) $(PDFOPTIONS) -o $@ $< -cours.pdf: 00_macros.md 01_rappel.md 02_integrales.md 03_optimisation.md 04_edo.md 05_fourier.md 06_probas_stats.md 07_remerciements.md 08_notes.md +cours.pdf: 00_macros.md 01_rappel.md 02_optimisation.md 03_integrales.md 04_edo.md 05_fourier.md 06_probas_stats.md 07_remerciements.md 08_notes.md pandoc -s $(OPTIONS) $(PDFOPTIONS) -o $@ $^ --metadata-file metadata.yaml -cours.html: 00_macros.md 01_rappel.md 02_integrales.md 03_optimisation.md 04_edo.md 05_fourier.md 06_probas_stats.md 07_remerciements.md 08_notes.md +cours.html: 00_macros.md 01_rappel.md 02_optimisation.md 03_integrales.md 04_edo.md 05_fourier.md 06_probas_stats.md 07_remerciements.md 08_notes.md pandoc -s $(OPTIONS) $(HTMLOPTIONS) -o $@ $^ --metadata-file metadata.yaml deploy: all @@ -34,13 +33,17 @@ deploy: all cp cours.html mti/index.html cp cours.pdf mti/cours.pdf mkdir -p mti/tpIntegrales - make -C tpIntegrales - cp tpIntegrales/*.pdf mti/tpIntegrales/ - cp tpIntegrales/tp_integrales_conv.html mti/tpIntegrales/index.html + make -C travaux_pratiques/tpIntegrales + cp travaux_pratiques/tpIntegrales/*.pdf mti/tpIntegrales/ + cp travaux_pratiques/tpIntegrales/tp_integrales_conv.html mti/tpIntegrales/index.html mkdir -p mti/tpEdo - make -C tpEdo - cp tpEdo/*.pdf mti/tpEdo/ - cp tpEdo/tpEquadiffs.html mti/tpEdo/index.html + make -C travaux_pratiques/tpEdo + cp travaux_pratiques/tpEdo/*.pdf mti/tpEdo/ + cp travaux_pratiques/tpEdo/tpEquadiffs.html mti/tpEdo/index.html + mkdir -p mti/tpOptimisation + make -C travaux_pratiques/tpOptimisation + cp travaux_pratiques/tpOptimisation/*.pdf mti/tpOptimisation/ + cp travaux_pratiques/tpOptimisation/tpOptimisation.html mti/tpOptimisation/index.html clean: rm -rf *.html *.pdf diff --git a/exemples/zero.c b/exemples/zero.c new file mode 100644 index 0000000000000000000000000000000000000000..34df9cdac3b23a78b4236e6b4472397e37df8b41 --- /dev/null +++ b/exemples/zero.c @@ -0,0 +1,28 @@ +#include <stdio.h> +#include <math.h> +#include <stdlib.h> + +double f(double x) { + return x * x - 25.0; +} + +double next_x(double x1, double x2, double (*foo)(double)) { + return x1 - (x2-x1)/(foo(x2)-foo(x1))*foo(x1); +} + +int main() { + const int max_iter = 1000; + double x1 = rand(); + double x2 = rand(); + printf("x1 = %f, x2 = %f\n", x1, x2); + for (int i = 0; i < max_iter; ++i) { + double x3 = next_x(x1, x2, f); + x1 = x2; + x2 = x3; + printf("x3 = %f, f(%f) = %f, at iter = %d\n", x3, x3, f(x3), i); + if (fabs(f(x3)) < 0.00001 ) { + return EXIT_SUCCESS; + } + } + return EXIT_FAILURE; +} \ No newline at end of file diff --git a/tpEdo/Makefile b/travaux_pratiques/tpEdo/Makefile similarity index 88% rename from tpEdo/Makefile rename to travaux_pratiques/tpEdo/Makefile index 9a261f706e635e1b72fbe32ebf2d13bc89e423ca..d9bd4f961126a7c5a37f65e0d3ca3fc658b239f1 100644 --- a/tpEdo/Makefile +++ b/travaux_pratiques/tpEdo/Makefile @@ -13,9 +13,9 @@ PDFOPTIONS += --template=./default.latex HTMLOPTIONS += -t html5 -HTMLOPTIONS += -c ../css/styling.css +HTMLOPTIONS += -c ../../css/styling.css HTMLOPTIONS += --self-contained -HTMLOPTIONS += --mathjax=../MathJax.js +HTMLOPTIONS += --mathjax=../../MathJax.js MD=$(wildcard *.md) HTML=$(MD:%.md=%.html) diff --git a/tpEdo/tpEquadiffs.md b/travaux_pratiques/tpEdo/tpEquadiffs.md similarity index 98% rename from tpEdo/tpEquadiffs.md rename to travaux_pratiques/tpEdo/tpEquadiffs.md index ef63b2867100cf5585963612f864b2434889bb28..7a9834f6efe9f0282d5633a712f032887e10293a 100644 --- a/tpEdo/tpEquadiffs.md +++ b/travaux_pratiques/tpEdo/tpEquadiffs.md @@ -103,7 +103,7 @@ où les constantes sont données par $\beta=8/3$, $\sigma=10$, et $\rho=28$. {#fig_lorenz +Wikipedia).](../../figs/1024px-Lorenz_system_r28_s10_b2-6666.png){#fig_lorenz width="50%"} La solution de l'équation de Lorenz est dite *chaotique*. Cela signifie diff --git a/tpEdo/tpEquadiffs.tex b/travaux_pratiques/tpEdo/tpEquadiffs.tex similarity index 100% rename from tpEdo/tpEquadiffs.tex rename to travaux_pratiques/tpEdo/tpEquadiffs.tex diff --git a/tpFourier/fourier2019/Makefile b/travaux_pratiques/tpFourier/fourier2019/Makefile similarity index 100% rename from tpFourier/fourier2019/Makefile rename to travaux_pratiques/tpFourier/fourier2019/Makefile diff --git a/tpFourier/fourier2019/MathJax.js b/travaux_pratiques/tpFourier/fourier2019/MathJax.js similarity index 100% rename from tpFourier/fourier2019/MathJax.js rename to travaux_pratiques/tpFourier/fourier2019/MathJax.js diff --git a/tpFourier/fourier2019/css/prism.css b/travaux_pratiques/tpFourier/fourier2019/css/prism.css similarity index 100% rename from tpFourier/fourier2019/css/prism.css rename to travaux_pratiques/tpFourier/fourier2019/css/prism.css diff --git a/tpFourier/fourier2019/css/prism.js b/travaux_pratiques/tpFourier/fourier2019/css/prism.js similarity index 100% rename from tpFourier/fourier2019/css/prism.js rename to travaux_pratiques/tpFourier/fourier2019/css/prism.js diff --git a/tpFourier/fourier2019/default.latex b/travaux_pratiques/tpFourier/fourier2019/default.latex similarity index 100% rename from tpFourier/fourier2019/default.latex rename to travaux_pratiques/tpFourier/fourier2019/default.latex diff --git a/tpFourier/fourier2019/fourier.md b/travaux_pratiques/tpFourier/fourier2019/fourier.md similarity index 100% rename from tpFourier/fourier2019/fourier.md rename to travaux_pratiques/tpFourier/fourier2019/fourier.md diff --git a/tpFourier/mydata.txt b/travaux_pratiques/tpFourier/mydata.txt similarity index 100% rename from tpFourier/mydata.txt rename to travaux_pratiques/tpFourier/mydata.txt diff --git a/tpFourier/tpFourier.tex b/travaux_pratiques/tpFourier/tpFourier.tex similarity index 100% rename from tpFourier/tpFourier.tex rename to travaux_pratiques/tpFourier/tpFourier.tex diff --git a/tpIntegrales/Makefile b/travaux_pratiques/tpIntegrales/Makefile similarity index 88% rename from tpIntegrales/Makefile rename to travaux_pratiques/tpIntegrales/Makefile index 9a261f706e635e1b72fbe32ebf2d13bc89e423ca..d9bd4f961126a7c5a37f65e0d3ca3fc658b239f1 100644 --- a/tpIntegrales/Makefile +++ b/travaux_pratiques/tpIntegrales/Makefile @@ -13,9 +13,9 @@ PDFOPTIONS += --template=./default.latex HTMLOPTIONS += -t html5 -HTMLOPTIONS += -c ../css/styling.css +HTMLOPTIONS += -c ../../css/styling.css HTMLOPTIONS += --self-contained -HTMLOPTIONS += --mathjax=../MathJax.js +HTMLOPTIONS += --mathjax=../../MathJax.js MD=$(wildcard *.md) HTML=$(MD:%.md=%.html) diff --git a/tpIntegrales/tpIntegrales.tex b/travaux_pratiques/tpIntegrales/tpIntegrales.tex similarity index 100% rename from tpIntegrales/tpIntegrales.tex rename to travaux_pratiques/tpIntegrales/tpIntegrales.tex diff --git a/tpIntegrales/tp_integrales_conv.md b/travaux_pratiques/tpIntegrales/tp_integrales_conv.md similarity index 100% rename from tpIntegrales/tp_integrales_conv.md rename to travaux_pratiques/tpIntegrales/tp_integrales_conv.md diff --git a/travaux_pratiques/tpOptimisation/Makefile b/travaux_pratiques/tpOptimisation/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..472cb8a0e4dd174ce03cee12dcd771594fe85bd8 --- /dev/null +++ b/travaux_pratiques/tpOptimisation/Makefile @@ -0,0 +1,31 @@ +OPTIONS = --filter=pandoc-numbering +OPTIONS += --filter=pandoc-crossref + +PDFOPTIONS = --highlight-style kate +PDFOPTIONS += --pdf-engine pdflatex +PDFOPTIONS += --number-sections +PDFOPTIONS += --template=./default.latex + + +HTMLOPTIONS += -t html5 +HTMLOPTIONS += -c ../../css/styling.css +HTMLOPTIONS += --self-contained +HTMLOPTIONS += --mathjax=MathJax.js + +MD=$(wildcard *.md) +HTML=$(MD:%.md=%.html) +PDF=$(MD:%.md=%.pdf) + + +all: $(HTML) $(PDF) + +%.pdf: %.md Makefile + sed -e 's/language-python/python/g' -e 's/language-bash/bash/g' $< > $*_tex.md + pandoc -s $(OPTIONS) $(PDFOPTIONS) -o $@ $< + rm $*_tex.md + +%.html: %.md Makefile + pandoc -s $(OPTIONS) $(HTMLOPTIONS) -o $@ $< + +clean: + rm -rf *.html *.pdf diff --git a/travaux_pratiques/tpOptimisation/MathJax.js b/travaux_pratiques/tpOptimisation/MathJax.js new file mode 100644 index 0000000000000000000000000000000000000000..3c5458cf56ca84c856384c74f5f51a6b349569f6 --- /dev/null +++ b/travaux_pratiques/tpOptimisation/MathJax.js @@ -0,0 +1,4 @@ +var fileref=document.createElement('script') +fileref.setAttribute("type","text/javascript") +fileref.setAttribute("src", "https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML") +document.getElementsByTagName("head")[0].appendChild(fileref) diff --git a/travaux_pratiques/tpOptimisation/css/prism.css b/travaux_pratiques/tpOptimisation/css/prism.css new file mode 100644 index 0000000000000000000000000000000000000000..f5031f25f4d40b2903cd3a6b10d7d4630886e19d --- /dev/null +++ b/travaux_pratiques/tpOptimisation/css/prism.css @@ -0,0 +1,142 @@ +/* PrismJS 1.15.0 +https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+python */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ + +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} + +pre[class*="language-"]::selection, pre[class*="language-"] ::selection, +code[class*="language-"]::selection, code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + background: hsla(0, 0%, 100%, .5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + +.token.function, +.token.class-name { + color: #DD4A68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + diff --git a/travaux_pratiques/tpOptimisation/css/prism.js b/travaux_pratiques/tpOptimisation/css/prism.js new file mode 100644 index 0000000000000000000000000000000000000000..d4f5b09df9373e6eb3bae84cd020c80fb38cb997 --- /dev/null +++ b/travaux_pratiques/tpOptimisation/css/prism.js @@ -0,0 +1,8 @@ +/* PrismJS 1.15.0 +https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+python */ +var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(g){var c=/\blang(?:uage)?-([\w-]+)\b/i,a=0,C={manual:g.Prism&&g.Prism.manual,disableWorkerMessageHandler:g.Prism&&g.Prism.disableWorkerMessageHandler,util:{encode:function(e){return e instanceof M?new M(e.type,C.util.encode(e.content),e.alias):Array.isArray(e)?e.map(C.util.encode):e.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++a}),e.__id},clone:function t(e,n){var r,a,i=C.util.type(e);switch(n=n||{},i){case"Object":if(a=C.util.objId(e),n[a])return n[a];for(var l in r={},n[a]=r,e)e.hasOwnProperty(l)&&(r[l]=t(e[l],n));return r;case"Array":return a=C.util.objId(e),n[a]?n[a]:(r=[],n[a]=r,e.forEach(function(e,a){r[a]=t(e,n)}),r);default:return e}}},languages:{extend:function(e,a){var t=C.util.clone(C.languages[e]);for(var n in a)t[n]=a[n];return t},insertBefore:function(t,e,a,n){var r=(n=n||C.languages)[t],i={};for(var l in r)if(r.hasOwnProperty(l)){if(l==e)for(var o in a)a.hasOwnProperty(o)&&(i[o]=a[o]);a.hasOwnProperty(l)||(i[l]=r[l])}var s=n[t];return n[t]=i,C.languages.DFS(C.languages,function(e,a){a===s&&e!=t&&(this[e]=i)}),i},DFS:function e(a,t,n,r){r=r||{};var i=C.util.objId;for(var l in a)if(a.hasOwnProperty(l)){t.call(a,l,a[l],n||l);var o=a[l],s=C.util.type(o);"Object"!==s||r[i(o)]?"Array"!==s||r[i(o)]||(r[i(o)]=!0,e(o,t,l,r)):(r[i(o)]=!0,e(o,t,null,r))}}},plugins:{},highlightAll:function(e,a){C.highlightAllUnder(document,e,a)},highlightAllUnder:function(e,a,t){var n={callback:t,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};C.hooks.run("before-highlightall",n);for(var r,i=n.elements||e.querySelectorAll(n.selector),l=0;r=i[l++];)C.highlightElement(r,!0===a,n.callback)},highlightElement:function(e,a,t){for(var n,r,i=e;i&&!c.test(i.className);)i=i.parentNode;i&&(n=(i.className.match(c)||[,""])[1].toLowerCase(),r=C.languages[n]),e.className=e.className.replace(c,"").replace(/\s+/g," ")+" language-"+n,e.parentNode&&(i=e.parentNode,/pre/i.test(i.nodeName)&&(i.className=i.className.replace(c,"").replace(/\s+/g," ")+" language-"+n));var l={element:e,language:n,grammar:r,code:e.textContent},o=function(e){l.highlightedCode=e,C.hooks.run("before-insert",l),l.element.innerHTML=l.highlightedCode,C.hooks.run("after-highlight",l),C.hooks.run("complete",l),t&&t.call(l.element)};if(C.hooks.run("before-sanity-check",l),l.code)if(C.hooks.run("before-highlight",l),l.grammar)if(a&&g.Worker){var s=new Worker(C.filename);s.onmessage=function(e){o(e.data)},s.postMessage(JSON.stringify({language:l.language,code:l.code,immediateClose:!0}))}else o(C.highlight(l.code,l.grammar,l.language));else o(C.util.encode(l.code));else C.hooks.run("complete",l)},highlight:function(e,a,t){var n={code:e,grammar:a,language:t};return C.hooks.run("before-tokenize",n),n.tokens=C.tokenize(n.code,n.grammar),C.hooks.run("after-tokenize",n),M.stringify(C.util.encode(n.tokens),n.language)},matchGrammar:function(e,a,t,n,r,i,l){for(var o in t)if(t.hasOwnProperty(o)&&t[o]){if(o==l)return;var s=t[o];s="Array"===C.util.type(s)?s:[s];for(var g=0;g<s.length;++g){var c=s[g],u=c.inside,h=!!c.lookbehind,f=!!c.greedy,d=0,m=c.alias;if(f&&!c.pattern.global){var p=c.pattern.toString().match(/[imuy]*$/)[0];c.pattern=RegExp(c.pattern.source,p+"g")}c=c.pattern||c;for(var y=n,v=r;y<a.length;v+=a[y].length,++y){var k=a[y];if(a.length>e.length)return;if(!(k instanceof M)){if(f&&y!=a.length-1){if(c.lastIndex=v,!(x=c.exec(e)))break;for(var b=x.index+(h?x[1].length:0),w=x.index+x[0].length,A=y,P=v,O=a.length;A<O&&(P<w||!a[A].type&&!a[A-1].greedy);++A)(P+=a[A].length)<=b&&(++y,v=P);if(a[y]instanceof M)continue;N=A-y,k=e.slice(v,P),x.index-=v}else{c.lastIndex=0;var x=c.exec(k),N=1}if(x){h&&(d=x[1]?x[1].length:0);w=(b=x.index+d)+(x=x[0].slice(d)).length;var j=k.slice(0,b),S=k.slice(w),E=[y,N];j&&(++y,v+=j.length,E.push(j));var _=new M(o,u?C.tokenize(x,u):x,m,x,f);if(E.push(_),S&&E.push(S),Array.prototype.splice.apply(a,E),1!=N&&C.matchGrammar(e,a,t,y,v,!0,o),i)break}else if(i)break}}}}},tokenize:function(e,a){var t=[e],n=a.rest;if(n){for(var r in n)a[r]=n[r];delete a.rest}return C.matchGrammar(e,t,a,0,0,!1),t},hooks:{all:{},add:function(e,a){var t=C.hooks.all;t[e]=t[e]||[],t[e].push(a)},run:function(e,a){var t=C.hooks.all[e];if(t&&t.length)for(var n,r=0;n=t[r++];)n(a)}},Token:M};function M(e,a,t,n,r){this.type=e,this.content=a,this.alias=t,this.length=0|(n||"").length,this.greedy=!!r}if(g.Prism=C,M.stringify=function(a,t,e){if("string"==typeof a)return a;if(Array.isArray(a))return a.map(function(e){return M.stringify(e,t,a)}).join("");var n={type:a.type,content:M.stringify(a.content,t,e),tag:"span",classes:["token",a.type],attributes:{},language:t,parent:e};if(a.alias){var r=Array.isArray(a.alias)?a.alias:[a.alias];Array.prototype.push.apply(n.classes,r)}C.hooks.run("wrap",n);var i=Object.keys(n.attributes).map(function(e){return e+'="'+(n.attributes[e]||"").replace(/"/g,""")+'"'}).join(" ");return"<"+n.tag+' class="'+n.classes.join(" ")+'"'+(i?" "+i:"")+">"+n.content+"</"+n.tag+">"},!g.document)return g.addEventListener&&(C.disableWorkerMessageHandler||g.addEventListener("message",function(e){var a=JSON.parse(e.data),t=a.language,n=a.code,r=a.immediateClose;g.postMessage(C.highlight(n,C.languages[t],t)),r&&g.close()},!1)),C;var e=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return e&&(C.filename=e.src,C.manual||e.hasAttribute("data-manual")||("loading"!==document.readyState?window.requestAnimationFrame?window.requestAnimationFrame(C.highlightAll):window.setTimeout(C.highlightAll,16):document.addEventListener("DOMContentLoaded",C.highlightAll))),C}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); +Prism.languages.markup={comment:/<!--[\s\S]*?-->/,prolog:/<\?[\s\S]+?\?>/,doctype:/<!DOCTYPE[\s\S]+?>/i,cdata:/<!\[CDATA\[[\s\S]*?]]>/i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/i,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/i,inside:{punctuation:[/^=/,{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^<!\[CDATA\[|\]\]>$/i;var n={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:s}};n["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var i={};i[a]={pattern:RegExp("(<__[\\s\\S]*?>)(?:<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\s*|[\\s\\S])*?(?=<\\/__>)".replace(/__/g,a),"i"),lookbehind:!0,greedy:!0,inside:n},Prism.languages.insertBefore("markup","cdata",i)}}),Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup; +!function(s){var e=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;s.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+?[\s\S]*?(?:;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:RegExp("url\\((?:"+e.source+"|.*?)\\)","i"),selector:RegExp("[^{}\\s](?:[^{};\"']|"+e.source+")*?(?=\\s*\\{)"),string:{pattern:e,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},s.languages.css.atrule.inside.rest=s.languages.css;var a=s.languages.markup;a&&(a.tag.addInlined("style","css"),s.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:a.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:s.languages.css}},alias:"language-css"}},a.tag))}(Prism); +Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/}; +Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.])\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],number:/\b(?:(?:0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+)n?|\d+n|NaN|Infinity)\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][+-]?\d+)?/,function:/[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,operator:/-[-=]?|\+[+=]?|!=?=?|<<?=?|>>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})\]]))/,lookbehind:!0,greedy:!0},"function-variable":{pattern:/[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${[^}]+}|[^\\`])*`/,greedy:!0,inside:{interpolation:{pattern:/\${[^}]+}/,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.js=Prism.languages.javascript; +Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\s\S]+?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=}$)/,lookbehind:!0},"conversion-option":{pattern://,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|rb|br)?("""|''')[\s\S]+?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^\s*)@\w+(?:\.\w+)*/i,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python; diff --git a/travaux_pratiques/tpOptimisation/default.latex b/travaux_pratiques/tpOptimisation/default.latex new file mode 100644 index 0000000000000000000000000000000000000000..4312f715daa7a88095e74bc668794731322f9984 --- /dev/null +++ b/travaux_pratiques/tpOptimisation/default.latex @@ -0,0 +1,288 @@ +\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$babel-lang$,$endif$$if(papersize)$$papersize$paper,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$} +$if(beamerarticle)$ +\usepackage{beamerarticle} % needs to be loaded first +$endif$ +$if(fontfamily)$ +\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} +$else$ +\usepackage{lmodern} +$endif$ +$if(linestretch)$ +\usepackage{setspace} +\setstretch{$linestretch$} +$endif$ +\usepackage{amssymb,amsmath,bm} +\usepackage{ifxetex,ifluatex} +\usepackage{fixltx2e} % provides \textsubscript +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} + \usepackage[utf8]{inputenc} +$if(euro)$ + \usepackage{eurosym} +$endif$ +\else % if luatex or xelatex +$if(mathspec)$ + \ifxetex + \usepackage{mathspec} + \else + \usepackage{unicode-math} + \fi +$else$ + \usepackage{unicode-math} +$endif$ + \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase} +$for(fontfamilies)$ + \newfontfamily{$fontfamilies.name$}[$fontfamilies.options$]{$fontfamilies.font$} +$endfor$ +$if(euro)$ + \newcommand{\euro}{€} +$endif$ +$if(mainfont)$ + \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} +$endif$ +$if(sansfont)$ + \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} +$endif$ +$if(monofont)$ + \setmonofont[Mapping=tex-ansi$if(monofontoptions)$,$for(monofontoptions)$$monofontoptions$$sep$,$endfor$$endif$]{$monofont$} +$endif$ +$if(mathfont)$ +$if(mathspec)$ + \ifxetex + \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \else + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \fi +$else$ + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} +$endif$ +$endif$ +$if(CJKmainfont)$ + \usepackage{xeCJK} + \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} +$endif$ +\fi +% use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +% use microtype if available +\IfFileExists{microtype.sty}{% +\usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype} +\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +\PassOptionsToPackage{hyphens}{url} % url is loaded by hyperref +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +$endif$ +\usepackage[unicode=true]{hyperref} +$if(colorlinks)$ +\PassOptionsToPackage{usenames,dvipsnames}{color} % color is loaded by hyperref +$endif$ +\hypersetup{ +$if(title-meta)$ + pdftitle={$title-meta$}, +$endif$ +$if(author-meta)$ + pdfauthor={$author-meta$}, +$endif$ +$if(keywords)$ + pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, +$endif$ +$if(colorlinks)$ + colorlinks=true, + linkcolor=$if(linkcolor)$$linkcolor$$else$Maroon$endif$, + citecolor=$if(citecolor)$$citecolor$$else$Blue$endif$, + urlcolor=$if(urlcolor)$$urlcolor$$else$Blue$endif$, +$else$ + pdfborder={0 0 0}, +$endif$ + breaklinks=true} +\urlstyle{same} % don't use monospace font for urls +$if(verbatim-in-note)$ +\VerbatimFootnotes % allows verbatim text in footnotes +$endif$ +$if(geometry)$ +\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$endif$ +$if(lang)$ +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel} +$if(babel-newcommands)$ + $babel-newcommands$ +$endif$ +\else + \usepackage{polyglossia} + \setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$} +$for(polyglossia-otherlangs)$ + \setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$} +$endfor$ +\fi +$endif$ +$if(natbib)$ +\usepackage{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} +$for(bibliography)$ +\addbibresource{$bibliography$} +$endfor$ +$endif$ +$if(listings)$ +\usepackage{listings} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(highlighting-macros)$ +$highlighting-macros$ +$endif$ +$if(tables)$ +\usepackage{longtable,booktabs} +% Fix footnotes in tables (requires footnote package) +\IfFileExists{footnote.sty}{\usepackage{footnote}\makesavenoteenv{long table}}{} +$endif$ +$if(graphics)$ +\usepackage{graphicx,grffile} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +$endif$ +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\renewcommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(strikeout)$ +\usepackage[normalem]{ulem} +% avoid problems with \sout in headers with hyperref: +\pdfstringdefDisableCommands{\renewcommand{\sout}{}} +$endif$ +$if(indent)$ +$else$ +\IfFileExists{parskip.sty}{% +\usepackage{parskip} +}{% else +\setlength{\parindent}{0pt} +\setlength{\parskip}{6pt plus 2pt minus 1pt} +} +$endif$ +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +$if(numbersections)$ +\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} +$else$ +\setcounter{secnumdepth}{0} +$endif$ +$if(subparagraph)$ +$else$ +% Redefines (sub)paragraphs to behave more like sections +\ifx\paragraph\undefined\else +\let\oldparagraph\paragraph +\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else +\let\oldsubparagraph\subparagraph +\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} +\fi +$endif$ +$if(dir)$ +\ifxetex + % load bidi as late as possible as it modifies e.g. graphicx + $if(latex-dir-rtl)$ + \usepackage[RTLdocument]{bidi} + $else$ + \usepackage{bidi} + $endif$ +\fi +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \TeXXeTstate=1 + \newcommand{\RL}[1]{\beginR #1\endR} + \newcommand{\LR}[1]{\beginL #1\endL} + \newenvironment{RTL}{\beginR}{\endR} + \newenvironment{LTR}{\beginL}{\endL} +\fi +$endif$ + +% set default figure placement to htbp +\makeatletter +\def\fps@figure{htbp} +\makeatother + +$for(header-includes)$ +$header-includes$ +$endfor$ + +$if(title)$ +\title{$title$$if(thanks)$\thanks{$thanks$}$endif$} +$endif$ +$if(subtitle)$ +\providecommand{\subtitle}[1]{} +\subtitle{$subtitle$} +$endif$ +$if(author)$ +\author{$for(author)$$author$$sep$ \and $endfor$} +$endif$ +$if(institute)$ +\providecommand{\institute}[1]{} +\institute{$for(institute)$$institute$$sep$ \and $endfor$} +$endif$ +\date{$date$} + +\begin{document} +$if(title)$ +\maketitle +$endif$ +$if(abstract)$ +\begin{abstract} +$abstract$ +\end{abstract} +$endif$ + +$for(include-before)$ +$include-before$ + +$endfor$ +$if(toc)$ +{ +$if(colorlinks)$ +\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$black$endif$} +$endif$ +\setcounter{tocdepth}{$toc-depth$} +\tableofcontents +} +$endif$ +$if(lot)$ +\listoftables +$endif$ +$if(lof)$ +\listoffigures +$endif$ +$body$ + +$if(natbib)$ +$if(bibliography)$ +$if(biblio-title)$ +$if(book-class)$ +\renewcommand\bibname{$biblio-title$} +$else$ +\renewcommand\refname{$biblio-title$} +$endif$ +$endif$ +\bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} + +$endif$ +$endif$ +$if(biblatex)$ +\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ + +$endif$ +$for(include-after)$ +$include-after$ + +$endfor$ +\end{document} diff --git a/travaux_pratiques/tpOptimisation/tpOptimisation.md b/travaux_pratiques/tpOptimisation/tpOptimisation.md new file mode 100644 index 0000000000000000000000000000000000000000..69232fe708f3ea13c89691c3e9cce25b941ac088 --- /dev/null +++ b/travaux_pratiques/tpOptimisation/tpOptimisation.md @@ -0,0 +1,175 @@ +--- +author: +- Mathématiques en technologie de l'information +title: Travail pratique - Optimisation +autoSectionLabels: false +autoEqnLabels: true +eqnPrefix: + - "éq." + - "éqs." +chapters: true +numberSections: false +chaptersDepth: 1 +sectionsDepth: 3 +lang: fr +documentclass: article +papersize: A4 +cref: false +urlcolor: blue +toc: false +include-before: <script src="css/prism.js"></script> +--- +\newcommand{\dd}{\mathrm{d}} +\newcommand{\real}{\mathbb{R}} +\newcommand{\integer}{\mathbb{Z}} +\renewcommand{\natural}{\mathbb{N}} +\newcommand{\complex}{\mathbb{C}} +\newcommand{\vectwo}[2]{\begin{pmatrix}#1 \\ #2 \end{pmatrix}} + + +# Objectif + +Réaliser un programme permettant de réaliser une régression linéaire +à une dimension à l'aide de la méthode de la descente de gradient. +Tester ce programme sur des données synthétiques afin de valider +votre implémentation. + +# Travail à réaliser + +## La régression linéaire à une seule variable + +### Solution analytique + +Afin de *valider* votre implémentation, il faut d'abord +étudier un cas simplifié où trouver la solution analytique +est aisé. + +On va chercher "la meilleure droite" +passant par un ensemble de points $\{(x_j, y_j)\}_{j=1}^N$. +Comme on l'a vu en cours, on cherche à minimiser la fonction +$$ +E(a,b)=\sum_{j=1}^N(a\cdot x_j + b - y_j)^2. +$$ +En résolvant, le système de deux équations à deux inconnues +$$ +\vec\nabla E(a, b)=\vec 0, +$$ +on peut trouver la valeur de $a$ et $b$ pour n'importe quel +ensemble de points $\{(x_j, y_j)\}_{j=1}^N$. + +Votre premier exercice sera de trouver l'expression de $a$ +et $b$ en fonction de $\{(x_j, y_j)\}_{j=1}^N$. + +### Solution numérique + +En prenant comme référence la solution ci-dessus, +il faut à présent implémenter la méthode de la descente de gradient +pour minimiser $E(a,b)$. +En partant d'une pente $a_0$ et d'une ordonnée à l'origine $b_0$, +il faut itérativement construire de meilleures approximations +$$ +\vectwo{a_{i+1}}{b_{i+1}}=\vectwo{a_i}{b_i}-\lambda \cdot \vec\nabla E(a_i, b_i), +$$ +avec $i\leq 1$ et $\lambda\in[0,1)$. On arrêtera les itérations +lorsque +$$ +\left|\left|\vectwo{a_{i+1}}{b_{i+1}}-\vectwo{a_i}{b_i}\right|\right|<\varepsilon, +$$ +où $\varepsilon>0$ est la précision souhaitée. + +### Test + +Afin de tester votre programme, vous devez générer un nuage de points. +Pour contrôler au mieux ce qui se passe, il est recommandé +de générer des points aléatoirement le long d'une droite, +et de bruiter un peu le résultat. Vous choisissez +$x_j$ entre deux bornes de votre choix (p.ex. 0 et 10) +puis tirez un certain nombre de $x_j$. A partir de là +vous construisez $y_j$ comme +$$ +y_j=c\cdot x_j+d + r_j, +$$ +où $|r_j|$ est un "petit" nombre aléatoire devant $(c\cdot x_j+d)$, et $c$ et $d$ +(la pente et l'ordonnée à l'origine de votre droite) sont choisis par vos soins. + +Il faut vous assurer que la solution analytique et la solution numérique +soient très proches (à $\varepsilon$ près) et qu'elles soient également assez proches +du $c$ et du $d$ que vous avez choisis. + +Tester votre code sur différentes valeurs de $c$ et $d$. Est-ce +que vos résultats sont toujours cohérents? Quelle est la valeur +de l'erreur moyenne? Qu'est-ce que l'erreur signifie? +Faites également varier la valeur maximale de $|r_j|$. Que se passe-t-il +quand $|r_j|$ devient trop grand? N'hésitez pas à représenter +graphiquement vos résultats. + +## Validation du modèle de régression + +Lorsqu'on réalise une régression, on *modélise* +notre nuage de points. Ici, on dit que le phénomène +qui a généré les points suit une droite plutôt qu'une parabole ou une exponentielle +ou n'importe quelle autre fonction. Afin de s'assurer +que notre modèle correspond relativement bien à notre +jeu de donnée, on peut faire ce qu'on appelle une *validation croisée* +(ou *cross validation* en bon français). +Cette technique est très utilisée en apprentissage automatique. +Il en existe un grand nombre de variantes, ici nous n'en verrons qu'une. + +Il s'agit ici de vérifier si le $a$ et le $b$ que nous avons +déterminés sont des valeurs qui continueraient à être correctes +si on ajoutait de nouveaux points à notre ensemble $\{(x_j, y_j)\}_{j=1}^N$. +Il est souvent peu pratique de générer de nouveaux points, on se contente +donc de diviser notre jeu de données en plusieurs partie. Une partie +des points sera utilisée pour *entraîner* notre modèle (déterminer +un $a$ et un $b$) l'autre partie sera utilisée pour tester le modèle, +on calculera l'erreur effective $E(a,b)$ par rapport à cette seconde +partie des points. + +Ici, pour simplifier on va séparer notre ensemble de $N$ points +en trois groupes de taille égale et en répartissant les points aléatoirement +dans les groupes. Nommons les groupes $G_1$, $G_2$, et $G_3$. Pour effectuer +la validation croisée, il faut réaliser les étapes suivantes: + +* entraîner le modèle avec les groupes $G_1\cup G_2$ et tester sur $G_3$, +* entraîner le modèle avec les groupes $G_1\cup G_3$ et tester sur $G_2$, +* entraîner le modèle avec les groupes $G_2\cup G_3$ et tester sur $G_1$. + +Pour les nuages de point générés à la section précédente, +quelle est la valeur de l'erreur pour chacun des groupes de tests? +(Donner les valeurs sous forme de tableau peut être une bonne idée.) +Comment interprétez vous ces résultats? N'hésitez pas à représenter +graphiquement vos résultats. + +# Rendu + +Il faut rendre un rapport de quelques pages (quelques: **plus petit** que 6). +Ce rapport doit être relativement bref et expliquer votre travail. +Il doit être composé de quatre parties principales: + +1. Une introduction générale qui décrit le cadre général du travail (ce que vous essayez de réaliser, par quels moyens, etc) et donner la structure de votre rapport (que contient chaque autre partie). +2. Une partie "théorique" décrire les concepts et méthodes que vous utilisez si cela est nécessaire afin de permettre une bonne compréhension du reste de votre travail par le lecteur. Ceci est nécessaire pour comprendre comment vous arrivez aux résultats que vous présentez dans la partie suivante. +3. Une partie résultats, où vous donnez les résultats que vous avez obtenus. Par exemple, répondre aux différentes questions posées dans cet énoncé, +mais n'hésitez pas à développer. +4. Une conclusion où vous résumez les résultats principaux de votre travail et éventuellement ouvrez sur comment vous pourriez améliorer votre travail ou l'étendre. + +Le code doit être réalisé en C (afin de vous entraîner). La visualisation peut être +faite avec l'outil de votre choix. Python avec la librairie *matplotlib* peut-être un bon choix. + +Vous **devez** faire ce travail par groupe de 2 et aucune exception ne sera faite. +Vous devez rendre le rapport sur `cyberlearn`. Le code doit être dans un repo git public +dont vous mettrez l'url sur `cyberlearn`. N'oubliez pas de bien spécifier le nom +des deux membres du groupe dans le rapport et dans le code. Je devrais pouvoir +compiler et exécuter votre projet (pensez évidemment à créer un `Makefile`). + +La note est une combinaison de la note du code et du rapport. + + +# Conseils et remarques + +Ce travail est loin d'être simple à réaliser. Il demande de combiner +beaucoup de concept vu ou pas en détail en cours. Utilisez le temps à disposition +pendant les séance pour poser des questions et n'attendez pas le dernier moment. + +La rédaction du rapport est également une tâche complexe et il s'agit de ne pas bâcler +sa réalisation. C'est un exercice qui vous sera utile lorsque vous devrez écrire votre +mémoire pour votre travail de bachelor. diff --git a/tpProba/aleatoire250.txt b/travaux_pratiques/tpProba/aleatoire250.txt similarity index 100% rename from tpProba/aleatoire250.txt rename to travaux_pratiques/tpProba/aleatoire250.txt diff --git a/tpProba/tpProba.tex b/travaux_pratiques/tpProba/tpProba.tex similarity index 100% rename from tpProba/tpProba.tex rename to travaux_pratiques/tpProba/tpProba.tex