powerpoint 2007

Download Report

Transcript powerpoint 2007

Quelques pistes d’algorithmes
possibles au lycée
Calcul d’aire
Calcul d’aire
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/n
Fin algorithme
Comparaison des 2 méthodes.
Calcul d’aire
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/3
et
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 efficace
que 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 :
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
Nombres premiers:
test probabiliste
Test probabiliste de primalité
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+1i
fin tant que
retourner vrai
Fin
Mais 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
L’algorithme de Miller-Rabin:
Test probabiliste de primalité
Fonction temoin(a,n)
‘renvoie 0 si a est un témoin de non primalité, 1 sinon
n-1m; 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 b1 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 si
Fin de fonction
Fonction millerrabin(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 premier
Fin de fonction
Test probabiliste de primalité
L’algorithme de Miller-Rabin sur Xcas:
Le calcul de primalité de 1234567891
par Miller Rabin est instantané, par
l’algorithme classique cela dure 225
secondes (presque 4 minutes)
Dichotomie
Dichotomie
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
Dessin en logo
Flocon de Koch
Un algorithme récursif: Flocon de Koch sur Xcas en logo
Dessins aléatoires
Dessins aléatoires sur Xcas: profil montagne
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 …
Les n sommets du polygone sont des Dessins aléatoires sur Xcas: profil montagne
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
tracemontagneremplie tracent le polygone
vide ou rempli en noir.
Dessins aléatoires sur Xcas: arbres
Sans aléa
Avec aléa
Fractales
L’ensemble de Mandelbrot:
Fractales sur scilab
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.
x[-0,25 ; 0,05] , y[0,6 ; 0,9]
x[-2 ; 1] , y[-1,5 ; 1,5]
Les ensembles de Julia:
Fractales sur scilab
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:
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]
x[-0,15 ; -0,075] , y[-1 ; -0,925]
Fractales sur scilab