Vous êtes sur la page 1sur 12

2

Calcul scientique avec Matlab

Marc Buffat UFR de Mcanique Universit Claude Bernard, Lyon I 11 septembre 2006

Marc BUFFAT, UFR Mcanique, UCBLyon

1.2. ALGORITHME

1.2.2 Exemple
Problme : dtermination du PGCD de 2 nombres entiers a et b Analyse : proprit du PGCD PGCD(a,b)=PGCD(a-b,b) (si a > b) PGCD(a,b)=PGCD(a,b-a) (si a < b) PGCD(a,a)=a Algorithme PGCD

Chapitre 1 Programmation avec Matlab


1.1 Dmarche du calcul scientique
1. Analyse physique du problme 2. Modle mathmatique 3. Analyse numrique 4. Solution algorithmique 5. Programmation sur un ordinateur 6. Analyse physique du rsultat

a,b entiers positifs tant-que a = b faire si a > b alors a a b sinon b b a n tant-que PGCD a Programme Matlab 1. % calcul le PGCD de 2 nombres entiers a et b 2. % initialisation alatoire 3. A=round(1000*rand(1)) ; B=round(1000*rand(1)) ; 4. % algorithme 5. a=A ; b=B ; 6. while (a~=b) 7. 8. 9. if (a>b) a=a-b ; else b=b-a ; end

1.2 Algorithme
Algorithme : ensemble de rgles prcises, qui permettent dobtenir un rsultat partir doprations lmentaires Algorithme numrique : donnes et rsultats = nombres Calcul scientique : utilisation dun ordinateur pour rsoudre un modle mathmatique dun problme physique laide dalgorithmes numriques.

10. end ; 11. PGCD=a ; 12. % afchage 13. disp(sprintf(PGCD de %d et %d = %d\n,A,B,a)) ;

1.2.1 Langage algorithmique


1. langage de description dalgorithmes indpendant des ordinateurs indpendant des langages (FORTRAN, PASCAL, C, Matlab, Maple) 2. langage naturel proche du langage mathmatique mais explicite sans syntaxe rigide (compilateur=homme)
Marc BUFFAT, UFR Mcanique, UCBLyon

1.2.3 Programmation structure


La gestion de la complexit dun problme est lessence mme de la programmation. Nous serons toujours limits par le nombre restreint de dtails que lon peut conserver clairement en mmoire
Marc BUFFAT, UFR Mcanique, UCBLyon

1.3. MATLAB
1. Conception modulaire descendante Dcomposer le problme gnral en une succession de sous-problmes plus simples et si possibles indpendants. Dterminer les points essentiels 2. Rechercher dune solution algorithmique Utilisation de bibliothques 3. Programmation structure ascendante Des sous-programmes (procdures) au programme principal Soigner le fond en priorit et non la forme Programmer simplement (sans astuces)

1.3. MATLAB
oprations *, -, / , \ : X=A\B ; ou X=inv(A)*B ; fonctions sappliquent aux matrices sin(A) ; A^2 ; A.^2 ; sin(A).^2+cos(A).^2-ones(size(A))

chanes caractres entre 2 , concatenation S=[un et deux] (tableau de car.) entre sortie disp(X) ; X=input(X=) ;

1.3.2 Structures de contrle


boucles for var=exp, inst., end boucle sur les colonnes de exp for var=1 :n, inst, end boucle classique de 1 n

1.3 Matlab
Matlab langage de manipulation numrique de matrices (voir aussi Scilab (http ://www-rocq.inria.fr/scilab)) Matlab est une boite outils danalyse numrique, avec un environnement agrable pour faire du calcul numrique avec sa programmation matricielle. Il dispose des mthodes usuelles de lanalyse numrique : 1. rsolution de systme linaire 2. dtermination des valeurs propres 3. rsolution de problme non-linaire 4. rsolution dquations diffrentielles (raides) 5. intgration numrique 6. optimisation et contrle 7. graphique 2D et 3D Utilisation de laide en ligne ! ! !

Un premier exemple X=rand(1,5) ; S=0 ; for K=X, S=S+K^2, end ; qui peut scrire plus classiquement X=rand(1,5) ; S=0 ; for i=1 :length(X), S=S+X(i)^2, end ; En gnral, on peut viter les boucles explicites Exemple calcul dun rsidu partiel des lignes 2 4 dun systme 5*5 A=rand(5,5) ; X=rand(5,1) ; B=rand(5,1) ; R=zeros(5,1) ; for i=2 :4 R(i)=B(i) for j=1 :5 R(i)=R(i)-A(i,j)*X(j) end end que lon peut crire plus efcacement for i=2 :4, R(i)=B(i)-A(i,1 :5)*X(1 :5), end ou encore R(2 :4)=B(2 :4)-A(2 :4,1 :5)*X(1 :5) ;
Marc BUFFAT, UFR Mcanique, UCBLyon

1.3.1 Rappel sur Matlab


clear efface toutes les variables variable dnition lors de linitialisation instruction si terminer par un ; pas dafchage du rsultat vecteur ligne X=[1 2 3] ; X=[1 :0.5 :3] ; X=ones(1,5) ; vecteur colonne Y=[1 ;2 ;3] ; Y=X ; Y=zeros(5,1) ; matrice A=[ 1 0 ; 0 1] ; A=eye(2,2) ; M=[X ;X] ; M=[Y Y] ; M=[Y ;Y] ;M=A ;
Marc BUFFAT, UFR Mcanique, UCBLyon

7
Test si

1.3. MATLAB

1.3. MATLAB
Script

if cond , inst1 ,else inst2, end test classique (possibilit de elseif) if x<0, y=x, else, y=-x, end valeur logique : 0=faux, 1=vrai oprateurs logiques : & (et), | (ou), ~ (ngation) oprateurs relationnels : <, <= ,> ,>= ,== ,~= fonctions logiques : any(Y==1), all(X==0) Choix multiple switch var, case val1, exp1 ; case val2, exp2 ; ... ;otherwise, exp ; end switch num case -1 disp(moins un) ; case 1 disp(plus un) ; case 0 disp(zero) ; otherwise disp(autres valeurs) ; end Boucle tant que while cond, inst., end excute les instructions tant que la cdt est vrai n=1 while prod(1 :n)<1.0e100 n=n+1 end continue passage litration suivante break arrt de la boucle interne
Marc BUFFAT, UFR Mcanique, UCBLyon

Un programme ou suite dinstructions Matlab peut tre sauvegard dans un chier script (M-File) ayant une extension .m chier program.m 1. a=0 ; fa=-Inf ; 2. b=3 ; fb=-fa ; 3. while (b-a) >eps*b 4. x=(a+b)/2 ; fx=x^3-2*x-5 ; 5. if (sign(fx) == sign(fa)) 6. 8. a=x ; fa=fx ; b=x ; fb=fx ; 7. else 9. end 10. end 11. x Pour excuter le script, il suft de taper le nom du chier sans lextension > > program Rem : les variables du script sont globales Fonctions Une fonction sont crites dans un chier avec une extension .m (M-File) et le nom du chier doit tre le nom de la premire fonction dnie (la seule visible). On lexcute en tapant le nom avec des arguments. fonction function arguments de sortie = nom(arguments dentre) fonction racine 1. function x=racine(a,b) 2. % calcul la racine de la fonction f(x) dnie ci-aprs sur [a,b] 3. fa=f(a) ; fb=f(b) ; x=(a+b)/2 ; 4. if (fa*fb>0) x=-Inf ; return ; end ; 5. while (b-a)>eps*x 6. x=(a+b)/2 ; fx=f(x) ; 7. if(sign(fx)==sign(fa)) 8. a=x ; fa=fx ;

Marc BUFFAT, UFR Mcanique, UCBLyon

9
9. 10. 11. 12. 13. 14. 15. else b=x ; fb=fx ; end end % denition de f(x) (fonction locale) function y=f(x) y=x^3-2*x-5

1.3. MATLAB

1.3. MATLAB

10

1.3.3 Optimisation
Matlab est un langage matricielle ! il faut donc utiliser en priorit les notations matricielles Exemple : calcul de la matrice de Vandermond A 1 t1 t2 .. tn 2 1 t 2 t 2 .. tn 2 1 At = .. .. .. .. .. m t m .. t m 1 t1 n 2 premire version : mthode naturelle (identique au C) 1. t=[0 :1 :200] ; n=100 ; 2. cpu0=cputime() ; 3. m=size(t,1) ; 4. for i=1 :m 5. for j=1 :n+1 6. A(i,j)=t(i)^(j-1) ; 7. end 8. end 9. cputime()-cpu0 qui sexcute en 4,87 sec version matricielle optimise 1. cpu0=cputime() ; 2. m=size(t,1) ; 3. A=zeros(m,n+1) ; 4. for i=1 :n 5. A( :,i+1)=A( :,i).*t ; 6. end 7. cputime()-cpu0 Alors que la version matricielle sexcute en 0,06 s, soit 80 fois plus rapidement

Exemples Fonction calculant n! 1ere version rcursive 1. function y=fact(n) 2. if (n<=1) y=1 3. else y=n*fact(n-1) 4. end 2nd version avec une boucle 1. function y=fact(n) 2. y=1 ; 3. for i=2 :n, y=y*i, end 3ieme version optimise 1. function y=fact(n) 2. y=prod(1 :n) ; Pointeurs vers une fonction function handle pointeur vers une fonction=adresse ptr_fonct=@fonction evaluation feval(ptr_fonct,liste arguments) R Calcul de lintgrale I = ab f (x) dx par la mthode des trapzes 1. function A=trapezes(ptr_f,a,b,n) 2. h=(b-a)/n ; X=[a :h :b] ; Y=feval(ptr_f,X) ; 3. A=h*((Y(1)+Y(n+1))/2+sum(Y(2 :n))) ; 4. % ou A=trapz(X,Y) ; Utilisation > > fp=@sin > > A=trapezes(fp,0,pi)
Marc BUFFAT, UFR Mcanique, UCBLyon

1.3.4 E/S avec Matlab


E/S formattes gnrales et similaires au C
Marc BUFFAT, UFR Mcanique, UCBLyon

11
ouverture du chier d=fopen(nomchier,permisson) permission=r,w (sous windows) rt,wt lecture dans le chier A=fscanf(d,format) format=%d %g %f %s %c ecriture dans le chier count=fprintf(d,format,A1,A2,..) fermeture du chier status=fclose(d)

1.3. MATLAB

1.3. MATLAB

12

Marc BUFFAT, UFR Mcanique, UCBLyon

Marc BUFFAT, UFR Mcanique, UCBLyon

13

2.2. VALEURS PROPRES


>> inv(A) >>A*inv(A) ; >>d=det(A) >>rank(A) ; >>eye(3) >>rand(3,3) Inversion dun matrice dterminant dune matrice ang dune matrice matrice identit 3x3 matrice contenant des nombres alatoires

14

Chapitre 2 Memo Matlab


2.1 Manipulation des vecteurs et des matrices
A=[1,3,6 ;2,7,8 ;0,3,9] size(A) A A( :,3) A(1, :) A(1, :) +A(3, :) B=[3 4 5 ; 6 7 2 ; 8 1 0] ; B C=A+B C=A-B C=A*B X=A\B

Le nombre condition dune matrice traduit le degr de singularit de la matrice. Une matrice identit un nombre condition gale 1 alors quune matrice singulire un nombre condition qui tend vers linni. >>cond(eye(6)) ans= 1 >>A=[1 1 ;1 1+0.000001] ; >>cond(A) ans= 4.0000e+006

transpos dune matrice composant dune matrice


` et 3eme ` addition de la 1ere ligne pas de sortie sur lcran car la ligne nit par (; )

addition de deux matrices soustraction de deux matrices produit de deux matrices rsolution de A.X=B

Symbole expm eig lu qr

Explication exponentiel dune matrice valeurs propres et vecteurs propres dune matrice dcomposition LU dune matrice dcomposition QR dune matrice

2.2 Valeurs propres


Le problme des valeurs et vecteurs propres est dni comme suit : A =

Symbole inv det rank cond eye(n) trace zeros(n,m)

Explication inverse dune matrice dterminant dune matrice rang dune matrice condition dune matrice nxn matrice identit sommation des termes de la diagonale dune matrice n m matrice dlments nulles

o sont les sont les valeurs propres et les vecteurs propres. >>e=eig(A) % donne les valeurs propres de A >>[V,D]=eig(A) % V est une matrice dont les colonnes sont les composantes des vecteurs propres D est une matrice dont les diagonales sont les valeurs propres. >>A=[5 3 2 ;1 4 6 ;9 7 2] >>[V,D]=eig(A)

Marc BUFFAT, UFR Mcanique, UCBLyon

Marc BUFFAT, UFR Mcanique, UCBLyon

15

2.3. DCOMPOSITION LU

2.7. OUTILS POUR LES FONCTIONS POLYNMIALES

16

2.3 Dcomposition LU
>>[L,U]=lu(A) >>L*U >>[L,U,P]=lu(A) P*A=L*U

2.7 Outils pour les fonctions polynmiales


Symbole poly roots polyval conv deconv polyt Explication convertit un ensemble de racines en une quation polynmiale donne les racines dun polynme value un polynme pour une valeur donne multiplie deux polynmes decompose un^polynme en dividend et residu

% La matrice P contient les purmutations tel que

2.4 Dcomposition QR
La matrice A peut tre dcompose en un produit de deux matrice, une matrice orthonorme Q et une autre triangulaire suprieure R.>>[Q,R]=qr(A)

Exemples : >>poly([r1 ,r2 , ...,rn ]) >>roots([1 15 136 498 968 592]) >>y=polyval([1 3 4 -5],2) % evaluation du polynme s3 +3s2 +4s -5 s=2 Multiplication de deux polynmes a(s)= s2 +3 s-1, b(s)=s3 -2s2 +6s-7 >>c=conv([1 3 -1],[1 -2 6 7]) c= 1 1 -1 13 -27 7 qui sont les coefcients du polynme produit Dcomposition dun polynme

2.5 Solution dun systme linaire


Ax = y >>x=inv(A)*y >>x=A\y >>[inv(A)*y A\y]

a(s)=b(s) m(s) + r(s) >>[m,r]=deconv(a,b) >>[m,r]=deconv([1 -2 6 7],[1 3 -1]) m= 1 -5 r= 0 0 22 -12 Nombres complexes>>2 +3*i >>i=sqrt(-1) i=0 +1.0000i >>c=-10 + 9* i>>[real(c), imag(c)] ans=-10 9 Conjugu dun nombre complexe>>conj(-1+5*i) ans= -1-5*i

2.6 Analyse des donnes


Symbole min(max) sum sort mean Explication extrait le minimum (maximum) dun vecteur calcul la somme des lments dun vecteur arrange le vecteur par ordre croissant des valeurs donne la valeur moyenne dun vecteur

Marc BUFFAT, UFR Mcanique, UCBLyon

Marc BUFFAT, UFR Mcanique, UCBLyon

17

2.8. LES BOUCLES ET LES CONDITIONS LOGIQUES

2.9. ECRITURE DES FONCTIONS


else dclaration#3 end Exemple n=100 ; if(rem(n,3)==0) x=0 ; elseif(rem(n,3)==1) x=1 ; else x=2 ; end o rem(x,y) est utilis pour calculer le reste de la division de x par y.

18

2.8 Les boucles et les conditions logiques


>>for i=1 :3 :100 a(i,i)=2*i ; end Boucles imbriques >>for i=1 :100 for j=1 :50 for k=1 :50 a(i,j)=b(i,k)*c(k,j)+a(i,j) ; end end end Boucle innie condition while dclaration end Exemple1 i=1 while (i<100) i=i+1 ; end Exemple2 n=1000 ; var=[] ; while (i<100) i=i+1 ; n=n/2-1 ; var=[var,n] ; end if condition#1 dclaration#1 elseif condition#2 dclaration#2
Marc BUFFAT, UFR Mcanique, UCBLyon

Oprateurs logiques et relationnels symbole == = <= (>=) <(>) & | Explication les deux conditions sont gales les deux conditions ne sont pas gales une est infrieure (suprieure) ou gale lautre une est infrieure (suprieure) lautre loperateur et loprateur ou

2.9 Ecriture des fonctions


MATLAB fournit des outils pratiques avec lesquels on peut crire des programmes qui utilisent une collection des commandes MATLAB. Cette approche est similaire celle des autres langages de programmation. Le chier programme doit avoir le format lename.m normalement appel mle. Ce-ci tant, tous les sous programmes MATLAB doivent nir par une extension .m, de sorte que MATLAB les reconnaisse comme programme MATLAB. Exemple function[ov1 , ov2 , ...]=func1(iv1 , iv2, ....)
Marc BUFFAT, UFR Mcanique, UCBLyon

19

2.9. ECRITURE DES FONCTIONS


iv1 , iv2 , ... sont les donnes (input) et ov1 , ov2 , ... sont les rsultats (output) Exemple : rsolution dune quation algbrique de second ordre ax2 +bx +c La solution est donne par la relation analytique x = function [r1,r2]=secroot(a,b,c) ; % % Trouver le dterminant Det=b2 - 4ac ; if(Det<0), r1 = b+ j2a Det ; r2 = b j2a Det ; disp(Les deux racines sont complexes conjugues) ; [r1 r2] elseif (Det==0), r1 =- 2ba r2 =r1 disp(Deux racines doubles) ; else(Det >0) Det r1= b+ ; 2a
Det r2= b ; 2a b b2 4ac 2a

2.9. ECRITURE DES FONCTIONS


Symbole save load diary

20

Explication sauvegarde les variables courantes charge un chier Matlab dj sauvegard sauvegarde les donnes sur lcran dans un chier en format texte

La forme de ces symboles save nomchier var1 var2 .... Le chier gnr par la commande save possde lextension .mat appel mat f ile Dans le cas o nous voulons sauvegarder le chier dans un format standard : save nomchier var1 var2 ..../ascii/double

La commande load est la contre partie de save. Cette commande scrit :

load nomchier var1 var2 .... >>a=[1 3 4] >>b=3 >>save test >>clear all % efface toutes les variables >>who % afche toutes les variables utilises >>load test >>who diary Cette commande capture tout le texte, avec les lignes de rponse, afch sur lcran. Le texte est sauvegard dans un chier qui peut tre dit plus tard. >>diary on >>a=1 ; b=4 ; c=5 ; >>[a b c] >>d=a*b >>e=g*h >>diary off A ce stade on peut utilis tout diteur de chier pour modier le fochier diary.

disp(Deux racines distinctes) ; end Une fois cette fonction est cre, on fait appel elle comme suit :>>[r1,r2]=secroot(3,4,5) ou>>[p1,p2]=secroot(3,4,5) Remarque : Il est important de spcier le chemin (pathname) du sous programme. Un autre souprogramme fct.m est donn ci-dessous function [f] = f ct (x) f = (1 x)2 ; Dans la ligne de commande du programme Matlab on introduit :>>y=fct(9) ; Ce type de sous programme permet une grande souplesse dans lcriture des programmes.
Marc BUFFAT, UFR Mcanique, UCBLyon

Marc BUFFAT, UFR Mcanique, UCBLyon

21

2.10. FONCTIONS DENTRE ET DE SORTIE DE BASE

2.11. TRACER DE COURBES


Tracer plusieurs donnes >>t=0 :0.1 :10 ; >>y1=sin(t).*t ; >>y2=cost(t).*t ; >>plot(t,y1,-,t,y2,- -) o les symboles - et - - reprsentent le style de ligne.

22

2.10 Fonctions dentre et de sortie de base


>>age=input(quelle est votre ge) >>nom=input(quelle est votre nom,s) Le signe s cest pour indiquer que cest une chne de caractres. disp cette commande afche sur lcran un texte ou une valeur disp( Introduction Matlab) format La commande format est utilise pour lcriture des nombres sous diffrents formats. Matlab effectue les calcul en mode double precision . Il est des fois prfrable de ne pas afcher les nombres en double prcision pour ne pas encombrer lcran. Matlab offre plusieurs possibilits dafchage : >>format short e >>format long >>format long e >>format hex

On peut aussi introduire les commandes suivantes : xlabel(text) et ylabel(text) pour introduire la lgende des axes x et y. axis[xmin, xmax , ymin , ymax ] La commande text est utilise pour introduire du texte dans la fentre graphique une position (x,y) donne text(x,y,contenu du texte) Exemple >>t=0 :0.1 :20 ; >>plot(t,sin(t)) >>xlabel(Time(sec)) >>ylabel(ydata) >>title(Ceci est un exemple) >>grid >>gtext(sin(t)) >>axis([0 20 -1.5 1.5]) La commande grid rajoute le maillage dans la gure. La commande gtext introduit un texte dans la gure en utilisant la sourie. subplot est utilise pour introduire plusieurs graphiques sur une mme fentre Matlab >>subplot(pqr) Les nombres p et q donnent la dimension de la gure et le nombre r permet didentier (ou sparer) la gure >>x=0 :0.1 :3*pi ; y=sin(x) ; z=cos(x) ; >>subplot(222) >>plot(x,y) >>title(x et y) >>subplot(223)
Marc BUFFAT, UFR Mcanique, UCBLyon

2.11 Tracer de courbes


Tracer de courbes simples : >>t=0 :0.1 :10 ; >>y=sin(t) ; >>plot(y) >>title(plot(y)) Si on veut tracer une courbe avec une couleur donne ou un type de ligne, on peut le spcier comme lindique lexemple suivant : >>plot(y,-b) ligne bleu en trait pointill. Les diffrents style sont donns dans le tableau ci-dessous Style Solide - Pointill _ Parsem : Pointill-parsem -. Line point . toile * cercle plus + x-marqueur x Couleur rouge r vert g bleu b blanc w invisible i

Marc BUFFAT, UFR Mcanique, UCBLyon

23
>>plot(x,z) >>title(x et z) >>subplot(224) >>plot(x, y, -, x, z, - -) >>title(x et [y z])

2.11. TRACER DE COURBES

Marc BUFFAT, UFR Mcanique, UCBLyon