Cnam-Paris-2007-2008 CSC012 F .Guiraud
1 Lundi 8 Octobre 2007
Exemples d’algorithmes On va maintenant utiliser le traitement de texte de Matlab Dans le menu fichier , tapez new puis M-file
exemple 2 : calcul de factorielle n : n ! F = n ! = 1 × 2 × …. × n
ALGORITHME Entrer le nombre n Initialiser F à 1
Pour i =2 jusqu’à n faire : F ← F × i
Fin Afficher F
On utilise l’instruction input pour entrer la donnée n et on initialise F à 1 ; on utilise la boucle for :
F=1 ; n=input (‘nombre de termes’) ; for i = 2 :n
F = F * i ; end ;
F
On peut aussi décrémenter : n=input (‘nombre de termes’) ; F=n ;
for i = n :-1 :1 F = F * i ; end ; F
exemple 3 : calcul de la somme d’une série Soit S la série S = 1
4 + 1
4
2+ ……+ 1
4
n+ …. , série géométrique de raison 1
4 ; on veut calculer la somme de n premiers termes de cette série :
1
èreétape : S = 0 ; x = 1 4
2
èmeétape S = S+x ( S = 1
4 ; x = 1 4 ) 3
èmeétape : x = x
4 ( x = 1 16 ) 4
èmeétape : S + x ( S = 1
4 + 1 16 )
5
èmeétape : x × 1
4 (x = 1 64 )
6
èmeétape : S + x ( S = 1 4 + 1
16 + 1
64 )
Etc
Cnam-Paris-2007-2008 CSC012 F .Guiraud
2
On a une suite dont les termes sont les sommes partielles ; on passe de S
k
à S
k+1
en ajoutant 1
4
k+1à S
k
Programme :
S=0 ; x = 0.25;n=input (‘nombre de termes’) ;for x = 1 :n S = S + x : x = x
4 ; end
S
Vérification : calcul théorique : la somme d’une suite de n termes d’une suite géométrique de raison q est
S
n
= x
1
1 -q
n1 - q
On ajoute en fin de programme : S – ( 1 – 0.25^n)/(1-0 .25) On doit obtenir 0.
Calcul de Pi par la méthode de Monte Carlo
On considère un quart de disque de rayon dont l’aire est égale à π
4 . On tire au sort, grâce à la fonction Random (unifrnd), les coordonnées d’un point dans le carré de coté 1. Sur un très grand nombre de points, on teste pour savoir si le point appartient ou non au quart de cercle.
Probabilité qu’un point soit dans le quart de cercle = nbre cas favorables nombre cas possibles Soit
∞ n→
lim
nbre points ds quart de cerclen = π
4
Programme
n= input (‘nombre de points’)
m = 0; % initialisation de m, nombre de points dans le quart de cercle for i = 1 :n
x=rand; % x est un nombre compris entre 0 et 1 y=: rand; % y est un nombre compris entre 0 et 1
if x
2+ y
2< = 1 % on teste si le point appartient au quart de cercle
m=m+1; % on incrémente de 1 le nombre de points dans le quart de cercle end
end
PI = 4*m/n
Variante utilisant la boucle while
: dans ce cas on effectue la boucle jusqu’à avoir une erreur donnée et à chaque exécution dela boucle le nombre n est doublé :
n=50 ; m=0 ; % initialisation de n et m
PI= 4 ; % initialisation de PI à un nombre très supérieur à 3.14 while abs( PI -pi) > 0.001 % erreur voulue 0.001
m=0 ; for i = 1 :n
x=rand; y= rand;
if x^2 + y^2 <= 1
Cnam-Paris-2007-2008 CSC012 F .Guiraud
3 m=m+1;
end % fin du test end % fin de la boucle for PI = 4*m/n
n = n*2; % on double n
end % fin de la boucle while
On peut aussi créer un deuxième fichier function qui introduit une nouvelle commande, dépendant du paramètre n, et qui sera appelée dans le programme principal.
function PI = montecarlo(n) % programme principal
m=0 ; n= input (‘nombre de points’) for i = 1 :n k= input (‘nombre de boucles’)
x=rand; for i =1:k
y= rand; PI = montecarlo(n) if x^2 + y^2 <= 1 n=n*2;
m=m+1: end end
end
PI = 4*m/n;
Algorithme d’Euclide
On veut calculer le pgcd de deux nombres a et b On fait la division euclidienne de a par b : a = bq
0
+ r
0
avec r
0
< b Le pgcd de a et b divise aussi b et r
0
donc on recommence ; on fait la division de b par r
0
: b=r
0q
1
+ r
1
avec r
1
< r
0
On continue jusqu’à avoir un reste égal à 0, le pgcd est le dernier reste non nul
%algorithme d'euclide
a=input('+grd nbre') b=input('+petit nbre')
i=1;r= mod(a,b); % mod(a,b) retourne le reste de la division de a par b while r > 0
a=b;
b=r;
r=mod(a,b);
end pgcd=b