Optimisation d'une fonction d'une variable réelle TP 1 L3 EURIA
2 novembre 2016
Exercice 1
1. Ecrire une fonction R f=function(x) qui prend en entrée une valeur x et qui renvoie f(x) = x/2 + 1/x. Etudier les variations de f "à la main" : la fonction f a combien d'extrema locaux sur l'intervalle [1,2]? Tracer la fonctionf sur l'intervalle[1,2]à l'aide de Rainsi que sa dérivée sur le même graphique.
2. Retrouver une valeur approchée des extrema locaux def sur l'intervalle[1,2]en utilisant la fonction R optim. Quels sont les algorithmes proposés par la fonction optim ?
3. De nombreux algorithmes d'optimisation utilisent la dérivée de la fonction à optimiser.
Dans certains cas, comme celui de la fonctionf considérée dans cet exercice, il est possible de calculer la dérivée de manière analytique mais dans d'autres cas c'est impossible ou trop fastidieux. Des méthodes de type "diérence nie" peuvent alors être utilisées. Elles permettent de calculer des valeurs approchées de la dérivée.
(a) Ecrire une fonction di=function(f,x,h=1e-8) qui prend en entrée une fonctionf quel- conque, un nombre réel x et un pash (qui aura la valeurh= 10−8 par défaut) et qui renvoie une approximation de la dérivée def au pointxpar la formule des diérences nies
f′(x)≈fˆ′(x) = f(x+h)−f(x) h
i. En déduire une valeur approchée def′(1).
ii. Tracer l'erreur |f′(1)−fˆ′(1)|en fonction de h (on pourra faire varierh entre1 et 10−16 et faire les graphiques avec une échelle logarithmique). Le choix par défaut h= 10−8 vous parait-il pertinent ?
iii. Dans cette question on cherche à retrouver par un raisonnement analytique la va- leur optimale dehobtenue dans la question précédente. An de décrire les erreurs numériques faites par R, on écrira quefˆ(x) =f(x) +ϵ(x)avec fˆ(x) la valeur nu- mérique renvoyée par R. La commande R .Machine$double.eps renvoie la précision machine et donc l'ordre de grandeur de la fonction ϵ. En utilisant un dévelop- pement limité à l'ordre 2 de f au voisinage de x, donner une approximation de
f(x+h)ˆ −f(x)ˆ
h −f′(x). Discuter.
(b) Recommencer la question précédente en utilisant l'approximation f′(x)≈f˜′(x) = f(x+h/2)−f(x−h/2)
h .
1
Avec quelle approximation obtient-on les meilleurs résultats ? Pourquoi ?
4. Ecrire une fonction dichotomie=function(f,a,b,tol=1e-5,h=1e-8) qui prend pour argument une fonctionf, deux réelsaetbqui correspondent aux extrémités d'un segment sur lequel f est strictement décroissante puis croissante, un pashet une tolérancetol, et qui calcule par dichotomie une approximation du minimum de f sur [a, b]. Pour cela on résoudra f′(x) = 0 où f′ est calculée en utilisant une approximation par diérence nie avec un pash. On arrêtera l'algorithme dès qu'on a trouvé xtel que |f′(x)|< tol. On testera sur la fonction de la question 1.
5. Ecrire une fonction di2=function(f,x,h=1e-8) qui prend en entrée une fonction f quel- conque, un pointxet un pashet qui renvoie une approximation de la dérivée seconde de f au pointx par la formule des diérences nies
f′′(x)≈ f(x+h) +f(x−h)−2f(x)
h2 .
Vérier le comportement de l'approximation quandhvarie sur la fonctionf de la question 1.
6. Ecrire une fonction newton=function(f,x0,tol=1e-5,h=1e-8) qui prend pour argument une fonction f, une valeur initiale x0, un pas h et une tolérance tol, et qui calcule par la méthode de Newton une approximation du minimum def.
7. Retrouver une valeur approchée des extrema locaux def en utilisant la fonction R opti- mize. Cette fonction utilise la méthode du nombre d'or décrite ici :
https ://fr.wikipedia.org/wiki/M%C3%A9thode_du_nombre_d%27or Comprendre cet algorithme puis écrire une fonction R qui l'implémente.
8. Comparer la vitesse de convergence des algorithmes d'optimisation vus dans les questions précédentes. On pourra comparer le nombre d'itération nécessaire pour obtenir une pré- cision tol donnée. On pourra aussi utiliser la commande R system.time pour obtenir les temps de calcul eectifs. Quel algorithme est le plus ecace ?
Exercice 2 (extrait de l'examen d'informatique 2014-2015)
1. Tracer sur un même graphique le graphe de la fonction f(x) = x2cos(x) en noir et la droitey =x en rouge. On restreindra la fenêtre graphique aux intervalles x ∈[−10,10]. Reproduire schématiquement le graphique sur la copie.
2. Trouver toutes les racines de l'équationx2cos(x) =x sur l'intervalle[−10,10]. Exercice 3 (extrait de l'examen d'informatique 2009-2010)
Soitf la fonction dénie parf(x) =log(x(1−x))∗sin(2πx) pourx∈[0,1].
1. Tracer cette fonction à l'aide de R. On donnera les commandes utilisées et on reproduira rapidement le graphique obtenu.
2. Cette fonction possède t'elle des extrema locaux ? Si oui, utiliser R pour en donner la valeur numérique. On donnera les commandes utilisées.
3. Utiliser R pour calculer∫1
0 f(x)dx. On donnera les commandes utilisées.
2