coursmemo.pdf
TRANSCRIPT
8/17/2019 coursmemo.pdf
http://slidepdf.com/reader/full/coursmemopdf 1/12
Calcul scientifique
avec Matlab
Marc Buffat
UFR de Mécanique
Université Claude Bernard, Lyon I
11 septembre 2006
2
Marc BUFFAT, UFR Mécanique, UCBLyon
8/17/2019 coursmemo.pdf
http://slidepdf.com/reader/full/coursmemopdf 2/12
3
Chapitre 1
Programmation avec Matlab
1.1 Démarche du calcul scientifique
1. Analyse physique du problème
2. Modèle mathématique
3. Analyse numérique
4. Solution algorithmique
5. Programmation sur un ordinateur
6. Analyse physique du résultat
1.2 Algorithme
Algorithme : ensemble de règles précises, qui permettent d’obtenir un résultat à
partir d’opérations élémentaires
Algorithme numérique : données et résultats = nombres
Calcul scientifique : utilisation d’un ordinateur pour résoudre un modèle mathé-
matique d’un problème physique à l’aide d’algorithmes numériques.
1.2.1 Langage algorithmique
1. langage de description d’algorithmes
indépendant des ordinateurs
indépendant des langages (FORTRAN, PASCAL, C, Matlab, Maple)
2. langage naturel
proche du langage mathématique
mais explicite sans syntaxe rigide (compilateur=homme)
Marc BUFFAT, UFR Mécanique, UCBLyon
1.2. ALGORITHME 4
1.2.2 Exemple
Problème : détermination du PGCD de 2 nombres entiers a et b
Analyse : propriété 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
a,b entiers positifs
tant-que a
= b faire
si a > b alors a ← a−b
sinon b ← b−a
fin tant-que
PGCD← a
Programme Matlab
1. % calcul le PGCD de 2 nombres entiers a et b
2. % initialisation aléatoire
3. A=round(1000*rand(1)); B=round(1000*rand(1)) ;
4. % algorithme
5. a=A; b=B;
6. while (a~=b)
7. if (a>b) a=a-b ;
8. else b=b-a ;
9. end
10. end;
11. PGCD=a;12. % affichage
13. disp(sprintf(’PGCD de %d et %d = %d\n’,A,B,a)) ;
1.2.3 Programmation structurée
“La gestion de la complexité d’un problème est l’essence même de la pro-
grammation. Nous serons toujours limités par le nombre restreint de détails que
l’on peut conserver clairement en mémoire”
Marc BUFFAT, UFR Mécanique, UCBLyon
8/17/2019 coursmemo.pdf
http://slidepdf.com/reader/full/coursmemopdf 3/12
5 1.3. MATLAB
1. Conception modulaire descendante
Décomposer le problème général en une succession de sous-problèmes plussimples et si possibles indépendants.
Déterminer les points essentiels
2. Rechercher d’une solution algorithmique
Utilisation de bibliothèques
3. Programmation structurée ascendante
Des sous-programmes (procédures) au programme principal
Soigner le fond en priorité et non la forme
Programmer simplement (sans astuces)
1.3 Matlab
Matlab langage de manipulation numérique de matrices
(voir aussi Scilab (http ://www-rocq.inria.fr/scilab))
Matlab est une boite à outils d’analyse numérique, avec un environnement agréable
pour faire du calcul numérique avec sa programmation matricielle. Il dispose des
méthodes usuelles de l’analyse numérique :
1. résolution de système linéaire
2. détermination des valeurs propres
3. résolution de problème non-linéaire
4. résolution d’équations différentielles (raides)
5. intégration numérique
6. optimisation et contrôle
7. graphique 2D et 3D
Utilisation de l’aide en ligne! ! !
1.3.1 Rappel sur Matlab
clear efface toutes les variables
variable définition lors de l’initialisation
instruction si terminer par un ; pas d’affichage du résultat
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 Mécanique, UCBLyon
1.3. MATLAB 6
opérations *, -, / , \ : X=A\B ; ou X=inv(A)*B ;
fonctions s’appliquent aux matrices
sin(A) ; A^2; A.^2;
sin(A).^2+cos(A).^2-ones(size(A))
chaînes caractères entre 2 ’ , concatenation S=[’un’ ’ et deux’] (tableau de car.)
entrée sortie disp(X) ; X=input(’X=’);
1.3.2 Structures de contrôle
boucles
for var=exp, inst., end boucle sur les colonnes de exp
for var=1 :n, inst, end boucle classique de 1 à n
Un premier exemple
X=rand(1,5) ;
S=0 ; for K=X, S=S+K^2, end ;
qui peut s’écrire plus classiquement
X=rand(1,5) ;
S=0 ; for i=1 :length(X), S=S+X(i)^2, end ;
En général, on peut éviter les boucles explicites
Exemple calcul d’un résidu partiel des lignes 2 à 4 d’un système 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 l’on peut écrire plus efficacement
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 Mécanique, UCBLyon
8/17/2019 coursmemo.pdf
http://slidepdf.com/reader/full/coursmemopdf 4/12
7 1.3. MATLAB
Test s i
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
opérateurs logiques : & (et), | (ou), ~ (négation)
opérateurs 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 exécute les instructions tant que la cdt est vrai
n=1
while prod(1 :n)<1.0e100
n=n+1
end
continue passage à l’itération suivante
break arrêt de la boucle interne
Marc BUFFAT, UFR Mécanique, UCBLyon
1.3. MATLAB 8
Script
Un programme ou suite d’instructions Matlab peut être sauvegardé dans un
fichier script (M-File) ayant une extension .m
fichier 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. a=x ; fa=fx ;
7. else
8. b=x ; fb=fx ;
9. end
10. end
11. x
Pour exécuter le script, il suffit de taper le nom du fichier sans l’extension
> > program
Rem : les variables du script sont globales
Fonctions
Une fonction sont écrites dans un fichier avec une extension .m (M-File) et le
nom du fichier doit être le nom de la première fonction définie (la seule visible).
On l’exécute en tapant le nom avec des arguments.
fonction function arguments de sortie = nom(arguments d’entrée)
fonction racine
1. function x=racine(a,b)
2. % calcul la racine de la fonction f(x) définie ci-après 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 Mécanique, UCBLyon
8/17/2019 coursmemo.pdf
http://slidepdf.com/reader/full/coursmemopdf 5/12
9 1.3. MATLAB
9. else
10. b=x ; fb=fx ;
11. end
12. end
13. % definition de f(x) (fonction locale)
14. function y=f(x)
15. y=x^3-2*x-5
Exemples
Fonction calculant n!
1ere version récursive
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, end3ieme version optimisée
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)
Calcul de l’intégrale I =R
ba f ( x) dx par la méthode des trapézes
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 Mécanique, UCBLyon
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
At =
1 t 1 t 2 .. t n1 t 21 t 22 .. t 2n.. .. .. .. ..1 t m1 t m2 .. t mn
première version : méthode 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 s’exécute en 4,87 sec
version matricielle optimisée
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 s’exécute en 0,06 s, soit 80 fois plus rapidement
1.3.4 E/S avec Matlab
E/S formattées générales et similaires au C
Marc BUFFAT, UFR Mécanique, UCBLyon
8/17/2019 coursmemo.pdf
http://slidepdf.com/reader/full/coursmemopdf 6/12
11 1.3. MATLAB
ouverture du fichier
fid=fopen(nomfichier,permisson)
permission=’r’,’w’ (sous windows) ’rt’,’wt’
lecture dans le fichier
A=fscanf (fid,format)
format=’%d %g %f %s %c’
ecriture dans le fichier
count=fprintf (fid,format,A1,A2,..)
fermeture du fichier
status=fclose(fid)
Marc BUFFAT, UFR Mécanique, UCBLyon
1.3. MATLAB 12
Marc BUFFAT, UFR Mécanique, UCBLyon
8/17/2019 coursmemo.pdf
http://slidepdf.com/reader/full/coursmemopdf 7/12
13
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’ transposé d’une matrice
A( :,3) composant d’une matrice
A(1, :)
A(1, :) +A(3, :) addition de la 1ere et 3 eme ligne
B=[3 4 5 ; 6 7 2 ; 8 1 0]; pas de sortie sur l’écran car la ligne finit par (; )B
C=A+B addition de deux matrices
C=A-B soustraction de deux matrices
C=A*B produit de deux matrices
X=A\B résolution de A.X=B
Symbole Explication
inv inverse d’une matrice
det déterminant d’une matrice
rank rang d’une matrice
cond condition d’une matrice
eye(n) nxn matrice identité
trace sommation des termes de la diagonale d’une matrice
zeros(n,m) n×m matrice d’éléments nulles
Marc BUFFAT, UFR Mécanique, UCBLyon
2.2. VALEURS PROPRES 14
>> inv(A) Inversion d’un matrice
>>A*inv(A) ;>>d=det(A) déterminant d’une matrice
>>rank(A) ; ang d’une matrice
>>eye(3) matrice identité 3x3
>>rand(3,3) matrice contenant des nombres aléatoires
Le nombre condition d’une matrice traduit le degré de singularité de la ma-
trice. Une matrice identité à un nombre condition égale à 1 alors qu’une matrice
singulière à un nombre condition qui tend vers l’infini.
>>cond(eye(6))
ans=
1
>>A=[1 1 ;1 1+0.000001] ;
>>cond(A)
ans=
4.0000e+006
Symbole Explication
expm exponentiel d’une matrice
eig valeurs propres et vecteurs propres d’une matricelu décomposition LU d’une matrice
qr décomposition QR d’une matrice
2.2 Valeurs propres
Le problème des valeurs et vecteurs propres est défini comme suit :
AΦ
=λΦ
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 Mécanique, UCBLyon
8/17/2019 coursmemo.pdf
http://slidepdf.com/reader/full/coursmemopdf 8/12
15 2.3. DÉCOMPOSITION LU
2.3 Décomposition LU
>>[L,U]=lu(A)
>>L*U
>>[L,U,P]=lu(A) % La matrice P contient les purmutations tel que
P*A=L*U
2.4 Décomposition QR
La matrice A peut être décomposée en un produit de deux matrice, une matrice
orthonormée Q et une autre triangulaire supérieure R.>>[Q,R]=qr(A)
2.5 Solution d’un système linéaire
Ax = y
>>x=inv(A)*y
>>x=A\y
>>[inv(A)*y A\y]
2.6 Analyse des données
Symbole Explication
min(max) extrait le minimum (maximum) d’un vecteur
sum calcul la somme des éléments d’un vecteur
sort arrange le vecteur par ordre croissant des valeurs
mean donne la valeur moyenne d’un vecteur
Marc BUFFAT, UFR Mécanique, UCBLyon
2.7. OUTILS POUR LES FONCTIONS POLYNÔMIALES 16
2.7 Outils pour les fonctions polynômiales
Symbole Explication
poly convertit un ensemble de racines en une équation polynômiale
roots donne les racines d’un polynôme
polyval évalue un polynôme pour une valeur donnée
conv multiplie deux polynômes
deconv decompose un^polynôme en dividend et residu
polyfit
Exemples :
>>poly([r1,r2, ...,rn])>>roots([1 15 136 498 968 592])
>>y=polyval([1 3 4 -5],2) % evaluation du polynôme s3 +3s2 +4s -5 à s=2
Multiplication de deux polynômes
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 coefficients du polynôme produit
Décomposition d’un polynôme
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é d’un nombre complexe>>conj(-1+5*i)
ans= -1-5*i
Marc BUFFAT, UFR Mécanique, UCBLyon
8/17/2019 coursmemo.pdf
http://slidepdf.com/reader/full/coursmemopdf 9/12
17 2.8. LES BOUCLES ET LES CONDITIONS LOGIQUES
2.8 Les boucles et les conditions logiques
>>for i=1 :3 :100
a(i,i)=2*i ;
end
Boucles imbriquées
>>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 infinie
condition while
déclaration
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
déclaration#1
elseif condition#2
déclaration#2
Marc BUFFAT, UFR Mécanique, UCBLyon
2.9. ECRITURE DES FONCTIONS 18
else
déclaration#3end
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.
Opérateurs logiques et relationnels
symbole Explication
== les deux conditions sont égales˜= les deux conditions ne sont pas égales
<= (>=) une est inférieure (supérieure) ou égale à l’autre
<(>) une est inférieure (supérieure) à l’autre
& l’operateur et
| l’opérateur ou
2.9 Ecriture des fonctions
MATLAB fournit des outils pratiques avec lesquels on peut écrire des pro-
grammes qui utilisent une collection des commandes MATLAB. Cette approche
est similaire à celle des autres langages de programmation.
Le fichier programme doit avoir le format filename.m normalement appelé m-
file. Ce-ci étant, tous les sous programmes MATLAB doivent finir par une exten-
sion .m, de sorte que MATLAB les reconnaisse comme programme MATLAB.
Exemple
function[ov1 , ov2, ...]=func1(iv1, iv2, ....)
Marc BUFFAT, UFR Mécanique, UCBLyon
8/17/2019 coursmemo.pdf
http://slidepdf.com/reader/full/coursmemopdf 10/12
19 2.9. ECRITURE DES FONCTIONS
iv1 , iv2, ... sont les données (input) et ov1 , ov2, ... sont les résultats (output)
Exemple : résolution d’une équation algébrique de second ordre
ax2 +bx +c
La solution est donnée par la relation analytique x = −b∓√
b2−4ac2a
function [r1,r2]=secroot(a,b,c) ;
%
% Trouver le déterminant
Det=b2- 4ac ;
if (Det<0),
r1=−b+ j
√ − Det 2a
;
r2=−b− j
√ − Det 2a ;
disp(’Les deux racines sont complexes conjuguées)’ ;
[r1 r2]
elseif (Det==0),
r1=- b2a
r2=r1
disp(’Deux racines doubles) ;
else(Det>0)
r1=−b+√ Det 2a
;
r2=−b−√ Det 2a
;
disp(’Deux racines distinctes’) ;
end
Une fois cette fonction estcrée, on fait appelà elle comme suit :>>[r1,r2]=secroot(3,4,5)
ou>>[p1,p2]=secroot(3,4,5)
Remarque : Il est important de spécifier le chemin (pathname) du sous pro-
gramme.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 l’écriture des
programmes.
Marc BUFFAT, UFR Mécanique, UCBLyon
2.9. ECRITURE DES FONCTIONS 20
Symbole Explication
save sauvegarde les variables courantesload charge un fichier Matlab déjà sauvegardé
diary sauvegarde les données sur l’écran dans un fichier en format texte
La forme de ces symboles
save nomfichier var1 var2 ....
Le fichier généré parla commande save possède l’extension .mat appelé mat − f ile
Dans le cas où nous voulons sauvegarder le fichier dans un format standard :
save nomfichier var1 var2 ..../ascii/double
La commande load est la contre partie de save. Cette commande s’écrit :
load nomfichier var1 var2 ....
>>a=[1 3 4]>>b=3
>>save test
>>clear all % efface toutes les variables
>>who % affiche toutes les variables utilisées
>>load test
>>who
diary Cette commande capture tout le texte, avec les lignes de réponse, affiché
sur l’écran. Le texte est sauvegardé dans un fichier 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 fichier pour modifier le fochier diary.
Marc BUFFAT, UFR Mécanique, UCBLyon
8/17/2019 coursmemo.pdf
http://slidepdf.com/reader/full/coursmemopdf 11/12
21 2.10. FONCTIONS D’ENTRÉE ET DE SORTIE DE BASE
2.10 Fonctions d’entrée et de sortie de base
>>age=input(’quelle est votre âge’)
>>nom=input(’quelle est votre nom’,’s’)
Le signe ’s’ c’est pour indiquer que c’est une chêne de caractères.
disp cette commande affiche sur l’écran un texte ou une valeur
disp(’ Introduction à Matlab’)
format La commande format est utilisée pour l’écriture des nombres sous dif-
férents formats. Matlab effectue les calcul en mode double pr ecision. Il est des
fois préférable de ne pas afficher les nombres en double précision pour ne pasencombrer l’écran. Matlab offre plusieurs possibilités d’affichage :
>>format short e
>>format long
>>format long e
>>format hex
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 donnée ou un type de ligne, on
peut le spécifier comme l’indique l’exemple suivant :
>>plot(y,’-b’)
ligne bleu en trait pointillé.Les différents style sont donnés dans le tableau ci-dessous
Style Line Couleur
Solide ’-’ point . rouge r
Pointillé ’_’ étoile * vert g
Parsemé ’ :’ cercle ◦ bleu b
Pointillé-parsemé ’-.’ plus + blanc w
x-marqueur x invisible i
Marc BUFFAT, UFR Mécanique, UCBLyon
2.11. TRACER DE COURBES 22
Tracer plusieurs données
>>t=0 :0.1 :10 ;>>y1=sin(t).*t;
>>y2=cost(t).*t ;
>>plot(t,y1,’-’,t,y2,’- -’)
où les symboles ’-’ et ’- -’ représentent le style de ligne.
On peut aussi introduire les commandes suivantes :
xlabel(’text’) et ylabel(’text’) pour introduire la légende des axes x et y.
axis[xmin, xmax, ymin, ymax]
La commande text est utilisée pour introduire du texte dans la fenêtre gra-
phique à une position (x,y) donnée
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 figure.
La commande gtext introduit un texte dans la figure en utilisant la sourie.
subplot est utilisée pour introduire plusieurs graphiques sur une même fenêtre
Matlab>>subplot(pqr)
Les nombres p et q donnent la dimension de la figure et le nombre r permet
d’identifier (ou séparer) la figure
>>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 Mécanique, UCBLyon
8/17/2019 coursmemo.pdf
http://slidepdf.com/reader/full/coursmemopdf 12/12
23 2.11. TRACER DE COURBES
>>plot(x,z)
>>title(’x et z’)>>subplot(224)
>>plot(x, y, ’-’, x, z, ’- -’)
>>title(’x et [y z]’)
Marc BUFFAT, UFR Mécanique, UCBLyon