300 likes | 395 Vues
Quelques pistes d’algorithmes possibles au lycée. Calcul d’aire.
E N D
Le problème.Le problème est de déterminer l’aire « sous la courbe » représentative d’une fonction convenable. Par exemples, calculer une valeur approchée de l’aire de : {M(x,y), 0 y x² , 0 x 1} (seconde, première) {M(x,y), 0 y 1/x – E(1/x) , 0 < x 1} (Terminale) Calcul d’aire
Première méthode: une grille régulière.On fabrique une grille régulière qui quadrille le carré en n² points.On admet que aire du carré * nb de points en dessous / n² est une valeur approchée de l’aire sous la courbe. Calcul d’aire
Première méthode: une grille régulière.Algorithme de calcul:Début Variable: n,x,y,s lire n x=0; s=0 répéter tant que x 1 x=x+1/n; y=0 répéter tant que y 1 y=y+1/n si y x² Alors s=s+1 fin répéter fin répéter afficher s/n²Fin algorithme Calcul d’aire
Deuxième méthode: Monte-Carlo.On choisis au hasard n points de ]0;1[² . De la même façon, on a: aire du carré * nb de points en dessous / n est une valeur approchée de l’aire sous la courbe. Calcul d’aire
Deuxième méthode: Monte-Carlo.Algorithme de calcul:Début Variable: k,n,x,y,s lire n k=0; s=0 répéter tant que k < n x= nb aléatoire dans ]0;1[ y= nb aléatoire dans ]0;1[ k = k+1 si y < x² alors s=s+1 fin répéter afficher s/nFin algorithme Calcul d’aire
Comparaison des 2 méthodes. Calcul d’aire
Monte-Carlo: ce qu’il y a en-dessous sur cet exemple...X est la variable aléatoire qui, à chaque point M(x,y) du carré ]0;1[ associe 1 si le point M est sous la courbe (y<x²) et 0 sinon.X suit une loi de Bernouilli avec p=aire sous la courbe = 1/3 Quand on réalise n expériences indépendantes (on choisit au hasard n points M), la variable aléatoire Yn = somme (Xi) suit une loi binômiale B(n,p) d’espérance np =n/3, variance npq. Quand n « devient grand », B(n,p) est « proche» de la loi normale d’espérance np et variance npq.Pour: n=10000 et p=1/3et n=20 et p=1/3 Calcul d’aire
Si Zn = Yn / n, Z suit une loi très proche de la loi normale d’espérance np/n = p et de variance npq/n² = pq/n, d’écart type s=(p(1-p))/(n).Or (p(1-p)) 0,5 quand p est dans [0;1], on a donc s 0,5/n .Pour une loi normale, 95% de l’effectif est entre E-2 s et E+2 s ,Donc ici, on a environ 95% de l’effectif entre p - 1/n et p+1/n Si on réalise 2500 échantillons de taille n=10000, on trouve que 95% des échantillons ont une moyenne qui est une valeur approchée de l’aire p à 0,01 près.Il en résulte que la méthode de Monte-Carlo, pour un calcul d’aire, donne (pour un nombre de points de 10 000) une valeur approchée de l’aire à 0,01 près avec un risque d’erreur de 5%. Calcul d’aire
Deuxième exemple: une fonction pathologique...F(x) = 1/x-E(1/x) sur ]0;1] est discontinue, n’admet pas de primitive sur ]0;1]Cette fonction est particulièrement pathologique au voisinage de 0. La méthode Monte-Carlo est plus efficaceque la méthode par la grille. Calcul d’aire
Deuxième exemple: une fonction pathologique...Le problème est de savoir ce domaine {M(x,y), 0<x 1, 0 y < f(x)} est mesurable.Sur chaque intervalle ]1/(k+1) ; 1/k] (k entier > 0), l’aire sous la courbe est : Calcul d’aire Donc l’aire sous la courbe sur l’intervalle ]1/(n+1) ; 1] est: Or la série (1+1/2+1/3+… 1/n –ln(n)) converge vers g (constante d’Euler).Donc la série de terme général Sk converge vers 1- g L’aire sous la courbe est donc 1- g 0,422 784 335 098 468.La méthode Monte-Carlo a donné (pour n=108): 0,422 759
Le problème:La cryptologie RSA nécessite de très grands nombres premiers (de l’ordre de 108).L’algorithme le plus simple pour savoir si un nombre est premier est:début lire n 2 i tant que i < racine(n)+1 si n mod i = 0 alors retourner faux i+1i fin tant que retourner vrai FinMais cet algorithme est très gourmand en division : de l’ordre de n.Aussi a-t-on cherché d’autres algorithmes pour savoir si un nombre est premier ou non.En particulier l’algorithme de Miller-Rabin qui utilise un calcul faisant intervenir l’aléatoire… Test probabiliste de primalité
L’algorithme de Miller-Rabin:L’algorithme repose sur 2 propriétés:Si n est premier impair alors: Pour tout entier a de [2;n], a n-1 = 1 [n] Dans Z/nZ, 1 n’a que deux racines carrées triviales 1 et n-1.Si on trouve un entier a qui ne vérifie pas l’une ou l’autre des propriétés, alors a est un témoin de la non primalité de n. L’idée est donc de chercher au hasard k témoins de non primalité. Si on n’en trouve pas, il y a de très fortes chances que n soit premier… Il se trouve que, si n est composé, environ 3/4 des nombres < n sont des témoins de non primalité. La probabilité que n soit composé et que k entiers au hasard soient des témoins de primalité est supérieure à 1- 1/4k.Pour k=7, la probabilité qu’un entier n ayant passé le test soit premier est 0,99994.Si on réitère le test, cette probabilité passe à 1 - 4.10-9 . Le coût de cet algorithme est de l’ordre de k.ln(n) au lieu de n pour l’algorithme classique.Pour un entier n de l’ordre de 108: 7ln(108) 129 108 = 10 000 Test probabiliste de primalité
L’algorithme de Miller-Rabin:Fonction temoin(a,n)‘renvoie 0 si a est un témoin de non primalité, 1 sinon n-1m; 1 y; a x ‘ initialisation du calcul de a m = an-1 Répéter tant que m>0 ‘ Calcul de a m - méthode des puissances successives Si m [2] = 1 alors ‘cas m impair x*y [n] y; m-1 m sinon‘cas m pair x b; x²[n] x;m/2 m Si (x=1 et b1 et b n-1) Alors retourner 0 ‘ cas où 1 admet une racine carrée non triviale fin de si donc n est composéfin répéter Si y=1 Alors retourner 1 ‘ cas où an-1 = 1: n est probablement premier sinon retourner 0 ‘ cas où an-1 1: n est composéfin siFin de fonctionFonctionmillerrabin(n,k) ’ renvoie 0 si n est composé, 1 si n est très probablement premier Répéter k fois entier aléatoire de [2;n-1] a Si temoin(a,n) = 0 alors retourner 0 ‘ a est un témoin de non primalité: n est composé fin de répéter retourner 1 ‘ on n’a pas trouvé de témoin de non primalité: n est très probablement premierFin de fonction Test probabiliste de primalité
L’algorithme de Miller-Rabin sur Xcas: Test probabiliste de primalité Le calcul de primalité de 1234567891 par Miller Rabin est instantané, par l’algorithme classique cela dure 225 secondes (presque 4 minutes)
Le problème: Il s’agit de trouver un encadrement de longueur donné e de la solution de f(x)=0 sur [a;b] où f est strictement croissante et f(a)<0 et f(b)>0. Algorithme non récursif Algorithme récursif Dichotomie
Un algorithme récursif: Flocon de Koch sur Xcas en logo Flocon de Koch
Algorithme : On part d’un triangle : (-4,0), (0,4),(4,0)On déplace aléatoirement les milieux des 2 côtés non horizontaux.Puis on itère la méthode … Dessins aléatoires sur Xcas: profil montagne
Les n sommets du polygone sont des complexes mis dans une matrice (1 ligne, n colonnes)Au départ la matrice est [-4,4i,4].La fonction mont :x est la matrice des n sommets; mont(x) est la même matrice augmentée des n-1 milieux déplacés de manière aléatoire en longueur (0,5*rand(0,1) = nb aléatoire entre 0 et 0,5) et en direction ( eit avec t aléatoire autour de p/2). La fonction récursive montagne(x,k) itère k fois la fonction mont. Les fonctions tracemontagne et tracemontagneremplietracent le polygone vide ou rempli en noir. Dessins aléatoires sur Xcas: profil montagne
Sans aléa Avec aléa Dessins aléatoires sur Xcas: arbres
L’ensemble de Mandelbrot:Dans le plan complexe, on considère la suite (zn) définie par zn+1 = zn²+ c et z0 = 0. L’ensemble de Mandelbrot est l’ensemble des c pour lesquels la suite converge (en module).S’il existe n pour lequel ∣zn∣>2 alors la suite diverge. Il est nécessaire que ∣c∣< 2 pour que la suite converge. Algorithme: On cherche pour chaque point d’un maillage d’une partie du plan, l’entier n (<255) à partir duquel ∣zn∣>2. La couleur de ce point sera n.Ainsi un point blanc (n=255) sera un c pour lequel la suite semble converger et plus un point est foncé, plus la suite diverge vite…un point noir (n=1) est un point c où la suite diverge immédiatement.L’intérêt de l’ensemble de Mandelbrot est sa frontière. Fractales sur scilab
x[-0,25 ; 0,05] , y[0,6 ; 0,9] x[-2 ; 1], y[-1,5 ; 1,5]
Les ensembles de Julia:Dans le plan complexe, on considère la suite (zn) définie par zn+1 = zn²+ c. Cette fois-ci, c est fixé (complexe situé à la frontière de l’ensemble de Mendelbrot: il y a autant d’ensemble de Julia que l’on veut) et c’est z0 qui varie. Un ensemble de Julia est l’ensemble des z0 pour lesquels la suite converge (en module).S’il existe n pour lequel ∣zn∣>2 alors la suite diverge. Même algorithme que précédemment: Fractales sur scilab c = -0,414 -0.612 i , x[-1,3 ; 1,3] , y[-1 ; 1]
Les ensembles de Julia: c = -0,414 -0.612 i , x[-1,3 ; 1,3] , y[-1,3 ; 1,3] Fractales sur scilab x[-0,15 ; -0,075] , y[-1 ; -0,925]