Вы находитесь на странице: 1из 28

Experiences numeriques pour la physique

L3 PMEC - L3 PAPP - L3 PC
wietze.herreman@u-psud.fr
pierre.morel@u-psud.fr
kevin.cassou@u-psud.fr
caroline.nore@u-psud.fr
jeremy.basley@u-psud.fr Annee 2012-13
2
Preface - Modalites
But
Lunite denseignement Experiences Numeriques pour la physique a maintenant lieu dans trois li`eres de la li-
cence 3 `a Orsay et consiste en 9 seances de 3h de TP sur machine. Le but de cet enseignement est dapprendre aux
etudiants comment un logiciel comme Matlab peut etre utile pour etudier/illustrer des phenom`enes physiques.
Controle continu 1/3
Nous demandons 4 compte rendus sur les TPs 4,5,7 et 8. Vous serez note sur le rapport et sur votre travail
en salle. Dans vos rapports, on vous demande de coller vos petits programmes. Ajoutez les gures obtenues en
TP, sans oublier dajouter le nom des axes et une legende. Commentez lallure des courbes et repondez aux
questions.
Vos rapports au nom de TPx nom prenom.pdf sous format .pdf seront envoyes par courriel `a ladresse mail
de votre enseignant, dans un delai de deux semaines apr`es la n de seance. Le controle continu comptera pour
un facteur 1/3 dans la note nale.
Meme si nous ne demandons pas de compte rendu sur les autres TPs, nous vous encourageons `a prendre un
minimum de notes sur lensemble des sujets de TPs.
Examen 2/3
Lexamen sera sur machine, tous documents autorises, et comptera pour 2/3 de la note.
3
TP 1. Introduction `a Matlab : Variables, matrices, graphiques
Dans ce premier TP, nous voulons vous familiariser avec lenvironnement Matlab. On apprendra comment
introduire et agir sur des variables de type scalaire ou de type matriciel et on apprendra `a faire des graphiques.
1.a. Decouverte Matlab
Lancer Matlab et decouvrir les fenetres.
Current Folder
Permet de naviguer dans le syst`emes de chiers. On peut choisir le repertoire de travail, creer des repertoires,
ouvrir des chiers ou changer leur noms.
Command Window
La ligne de commande >> : ici nous entrons les commandes que lon veut voir execute par Matlab.
Workspace
Les variables qui sont actuellement presentes dans la memoire vive de lordinateur. On peut changer leur
nom, voir leur taille et leur type et les sauvegarder.
Command History
La liste des derni`eres commandes utilisees. Dans le Command Window, on peut faire appel aux precedentes
commandes avec les operations avec les `eches haut & bas. En ecrivant les premi`eres lettres, puis utilisant
`eches haut & bas, on retrouve les precedentes commandes de mani`ere plus specique.
Il arrive que lon ferme des fenetres par hasard, pour retrouver le format habituel, aller dans les Desktop/Desktop
Layout/Default.
Exercice
Mettez-vous dans un nouveau repertoire ENP/L3PC, ou L3PMEC ou L3PAPP que vous creez sur le Bureau,
sil nexiste pas dej`a. Ceci sera le repertoire de travail que vous allez utiliser pendant toutes les seances.
1.b. Documentations Matlab
Tous les documents sont autorises pendant les seances, mais egalement pendant lexamen : vous allez toujours
avoir une mine dinformation `a votre disposition si vous savez comment vous y retrouver.
Lancer les documentations en cliquant sur le bouton ( ?), soit ecrire (doc) `a la ligne de commande. Si vous
connaissez ou si vous avez une idee du nom dune fonction, par exemple la fonction sinus, alors vous pouvez
executer (doc sin) `a la ligne de commande. Vous seriez immediatement envoye vers la page qui contient une
information detaillee, ainsi que des exemples et des liens.
Exercices
1. Consulter les pages daide sur les operateurs arithmetiques : +,-,*,/,et logiques : ==, =,>,<,<=,>=
2. Retrouver le nom des commandes qui permettent de calculer lexponentielle, le logarithme Neperien,
larctangente, la partie reelle, la constante
1.c. Variables scalaires
Lorsque nous programmons, nous sommes amenes `a introduire des variables intermediaires dans les quelles on
enregistre certaines valeurs. Quelques exemples :
Entier : a=1;
Reel : r=3.7809 , c=2.997e8
Complexe : g=1+3i; h=2.3j
Logique : test1 = true; test2 = a<0;
Caract`eres : axeX = temps en s; courbe1 = temperature
4
Pour charger une variable sans lacher `a lecran, nir linstruction par un point-virgule. Separer
des commandes sur une meme ligne par une virgule ou un point-virgule. Une fois crees, nous pouvons reutiliser
ces variables en leur appelant par leur nom.
Compare aux autres langages de programmation, il ne faut jamais declarer les variables au prealable
en Matlab. Initialiser des variables peut etre inetressant pour des raisons de gain de vitesse. Matlab fait la
distinction entre minuscules et majuscules. Il faut faire attention au choix des noms des variables car vous
pouvez surcharger le nom dune fonction, que vous ne pourriez plus utiliser par la suite. Exemple :
Ne pas surcharger les noms de fonctions : sin = 0.4; sin(6)
On introduit une variable au nom sin qui remplacera la commande sin(x) qui permet de calculer le sinus de x.
Un message derreur apparaitra car plutot que de calculer sin 6, Matlab tentera de retrouver le sixi`eme element
du tableau au nom de sin.
Pour resoudre le probl`eme precedent, ou pour nettoyer les variables chargees dans la memoire vive de lordina-
teur, il sut de clear de nettoyer cet environnement :
Tout eacer : clear
Exercice
Calculer
arctan
_
(1 + 4 3218)
1/3
sin(Re(e
i7
))
_
/
en utilisant des variables intermediaires. Acher 15 chires signicatifs sur lecran. (doc format)
1.d. Variables vectorielles & matricielles
En matlab, on utilise souvent des variables vectorielles ou matricielles. Il est important de savoir comment les
creer, comment y acceder ou modier leurs elements et comment faire des manipulations dessus.
Creer des matrices
Quelques exemples pour creer des vecteurs et matrices `a la main :
Vecteur ligne : x=[1,2,6,9,10]
Vecteur colonne : y=[1;2;6;9;10]
Matrice : A=[1,2,3;4,5,6;7,8,9]
On peut coller ensemble des dierentes matrices si leurs tailles sont compatibles. Deux exemples, un correct, un
autre errone
Coller deux matrices ensemble (correct) : x=[1,2]; y=[1,2;3,4]; w=[x;y]
Coller deux matrices ensemble (errone) : x=[1,2]; y=[1,2;3,4]; w=[x,y]
Pour creer de grands tableaux de points equidistants :
Points equidistants de 1 `a 101 par pas de 10 : f=1:10:101
100 points equidistants entre 0 et 3 : g=linspace(0,3,100)
Dans la premi`ere methode, lincrement (le pas) peut etre negatif ou positif. Si lincrement est 1, il ne faut pas
le mettre (1:8 est la meme chose que 1:1:8). Quelques commandes pour charger des matrices predenies :
Un partout de taille 10 lignes et 5 colonnes : u=ones(10,5)
Zero partout de taille 1 ligne et 10 colonnes : u=zeros(1,10)
Aleatoire entre 0 et 1 (uniforme), 4 lignes 100 colonnes : r=rand(4,100);
Consulter/modier les elements
Pour consulter/modier quelques elements dun vecteur ou dune matrice, il faut travailler avec des indices
entiers qui demarrent toujours avec 1. Supposons que nous avons charge les variables
5
x=rand(20,1); y=1:0.5:8; A=ones(3,9);
Acceder aux elements dun vecteur = specier un indice :
Montrer le 2i`eme element de x : x(2)
Modier le 3i`eme element de y en 8 : y(3) = 8
Montrer 3i`eme jusquau 11i`eme element de y : y(3:11)
Remplacer les lignes 9, 4 et 15 de x par 1 : x([9,4,15]) = 1
Acceder aux elements dune matrice = specier deux indices :
Montrer lelement sur la 1i`ere ligne, 5i`eme element de A : A(1,5)
Remplacer la 2i`eme colonne de A par 1 2 3 : A(:,2) =[1;2;3]
Montrer le bloc forme par les lignes 1 et 3 et les colonnes 4 `a 9 : A([1,3],4:9)
Pour consultez la taille/longueur des tableaux :
Nombre de lignes et colonnes : size(A)
Longueur de vecteurs : length(x)
Fonctions elementaires et operations arithmetiques
Toutes les fonctions elementaires (sin,cos,...) ainsi que les operateurs logiques (>,<, ==, ...) sappliquent
automatiquement sur tous les elements de matrices. Il faut faire attention lorsque quon combine des matrices
entre elles (produits, divisions, puissances). Pour les matrices
x=rand(20,1); A=ones(20,20); y=ones(3,10); z=1:8
nous donnons quelques exemples corrects :
Produit element par element : x.*sin(x)
Division element par element : x./sin(x)
Puissance 3, element par element : A. 3
Produit matriciel : A*x
Inverse de z : 1./z
Transpose de y : y.
Les tailles des matrices combinees sont toujours compatibles ici. Voici aussi, quelques exemples qui ne marchent
pas :
Erreur : Produit element par element : x.*y
Erreur : Puissance matricielle dune matrice non-carre y. 2
Erreur : Somme de deux matrices A+z
Lire les messages derreur que Matlab ache, pour savoir les reconnatre plus tard.
Exercices
1. Soit a un vecteur ligne avec les chires 1 `a 3 et b un vecteur ligne avec les chires 6 `a 4. Calculer
4*a , a+b , a+b, a*b , a.*b , a./b , a.2, a2
Expliquer le resultat ou le message derreur.
2. Soit A un vecteur colonne avec les chires 1 `a 3 et B un vecteur ligne avec les elements [4 6 9 10].
(a) Calculer le produit matriciel de A et B . Stocker le resultat dans la variable Q.
(b) Montrer lelement sur la deuxi`eme ligne et troisi`eme colonne de Q et verier que lon a bien 18.
(c) Modier la 3i`eme ligne par une liste de points equidistants de 4 `a 1
(d) Multiplier la matrice element par element avec une matrice aleatoire de taille 4 fois 2.
3. Donner les instructions Matlab permettant de construire la matrice suivante (deux instructions au mini-
mum) :
M =
_
_
_
_
_
_
_
_
_
0 0 0 0
0 6 6 0
0 6 6 0
0 0 0 0
.
.
.
.
.
.
.
.
.
.
.
.
0 0 0 0
_
_
_
_
_
_
_
_
_
6
La matrice M a 20 lignes.
4. Faire un vecteur ligne de points equidistants, allant de 0 `a 10 avec un intervalle de sin(2). Mesurer le
nombre delements dans ce vecteur sans acher le vecteur sur lecran.
5. Introduire X un vecteur ligne allant de 0 `a 10 en 1000 points. Calculer la valeur absolue de la fonction
sinus de X. Utilisant un test logique et la commande sum, comptez le nombre delements du vecteur F
pour qui F > 0.7.
6. Faire un tableau (4 lignes, 3 colonnes) de nombres aleatoires uniformement distribues entre -1 et 4.
1.e. Courbes
Nous souhaitons acher une courbe y(x) = sin(x) en fonction de x [0, 10]. Il faut proceder de la mani`ere
suivante
Introduire un tableau de points de x : x=linspace(0,10*pi,200);
Calculer la fonction sur tous les points x : y=sin(x);
Acher la courbe : plot(x,y)
Pour ajouter une deuxi`eme courbe, par exemple z(x) = cos(x) dans une autre couleur :
Calculer lautre fonction sur tous les points x : z=cos(x);
Continuer `a dessiner sur la meme gure : hold all
Acher la courbe : plot(x,z)
Arreter de dessiner sur la meme gure : hold off
Ajouter un titre, le nom des axes et une grille
Nom de laxe horizontal : xlabel(x)
Nom de laxe vertical : ylabel(y et z)
Legende legend(sin(x),cos(x))
Ajouter un titre : title(Ma premier courbe)
Ajouter une grille : grid on
Fixer letendue des axes
Fixer letendue selon x [0, 5] : xlim([0,5*pi])
Fixer letendue selon y [1.5, 1.5] : ylim([-1.5,1.5])
Il y a plein doptions pour faire des courbes dans de dierents couleurs, utilisant des marqueurs, des lignes
pointillees, etc. Consultez les documentations doc plot, doc linespec. Quelques commandes pour ouvrir et
fermer les gures.
Nouvelle fenetre de gure : figure
Aller vers la gure 2 : figure(2)
Fermer toutes les gures : close all
Matlab vous ore la possibilite de modier les gures `a posteriori utilisant une interface graphique. Trouvez
comment. Sauvegarder la gure, sous le format .g de Matlab si vous voulez la modier ulterieurement. Il faudra
utiliser un autre format, si vous souhaitez utiliser les gures dans vos rapports (preferez .eps).
Consultez aussi les pages daide des fonctions suivantes
plot3, semilogx, semilogy, loglog, hist, ginput
pour savoir ce quelles permettent de faire.
Exercices
1. Pour tout n 1, on pose u
n
= n
2
e
n
/(1 +n). Donnez les instructions Matlab permettant de calculer les
100 premiers termes de cette suite. Tracer u
n
en fonction de n utilisant des points noires.
2. Acher la courbe parametrisee en coordonnees cylindriques r(t) = 1+0.5 sin(10t), (t) = t avec t [0, 2],
dans le plan x y. Utiliser susamment de points pour avoir une courbe visuellement lisse.
3. Soit f
1
(x) = arctan(4x), f
2
(x) = xlog x deux fonctions et x [0, 5]. Visualiser les deux courbes et trouver
le point dintersection graphiquement ou `a laide de la fonction ginput.
7
1.f. Surfaces
Une fonction f(x, y) peut se visualiser sur un plan `a laide de Matlab. Voici une procedure pour f(x, y) =
y cos x +xcos y, dans le rectangle R : (x, y) [0, 10] [0, 5]
100 valeurs de x explorees : xint=linspace(0,10*pi,100);
100 valeurs de y explorees : yint=linspace(0,5*pi,100);
Faire un maillage : [X,Y]=meshgrid(xint,yint);
Calculer la fonction sur le maillage : F=Y.*cos(X)+X.*cos(Y);
Acher la fonction comme une surface : surf(X,Y,F);
Ne pas montrer le maillage : shading flat
On peut ajouter un titre et le nom des axes comme avant (zlabel pour laxe z) et on peut tourner la gure
pour la voir sous des dierents angles. On peut preferer montrer la fonction utilisant un code-couleur ou des
iso-contours. Ceci se fait avec
Acher F en code couleur : pcolor(X,Y,F); shading flat
Acher F `a laide de 10 isocontours : contour(X,Y,F,10);
Ajouter le code couleur : colorbar
Fixer les echelles de couleur entre F=-5 et +5 : caxis([-5,5])
Les codes couleurs sont automatiquement xes par Matlab, mais il existe des alternatives (doc colormap).
On peut egalement montrer des surfaces plus compliquees, caracterisees par des equations parametriques.
Exemple, pour la surface dune sph`ere de rayon 1 :
x = cos cos , y = cos sin , z = sin
avec [0, ] et [0, 2], il sut de
100 valeurs de explorees : thint=linspace(0,pi,100);
100 valeurs de explorees : phint=linspace(0,2*pi,100);
Faire un maillage : [TH,PH]=meshgrid(thint,phint);
Equations parametriques : X=cos(TH).*cos(PH);Y=cos(TH).*sin(PH);Z=sin(TH);
Acher la surface : surf(X,Y,Z);shading flat
Exercices (facultatif )
1. Dans le plan (x, y), representer londe dont lamplitude est donnee par :
A(x, y) = exp(ky) sin(kx),
avec k = 1, pour x [0, 10] et y [0, 10], utilisant des iso-contours.
2. Acher la surface parametrisee
x = 2
_
1 e
u/(6)
_
cos ucos
2
(v/2)
y = 2
_
1 e
u/(6)
_
sin ucos
2
(v/2)
z = 1 e
u/(3)

_
1 e
u/(6)
_
sin v
pour u [0, 6] et v [0, 2].
8
TP 2. Programmation en Matlab : Scripts & fonctions
Dans ce TP, nous allons apprendre les structures de base (boucles, tests, fonctions, scripts) qui permettent de
programmer en Matlab.
2.a. Editeur Matlab
Pour programmer en Matlab, nous vous conseillons dutiliser lediteur de Matlab. Cliquer sur licone new
script dans le coin du haut `a gauche pour avoir une nouvelle page blanche.
Cet editeur Matlab est preferable, car il vous aidera `a trouver les erreurs les plus grossi`eres et pas seulement
en faisant apparatre certains mots clefs en couleur. Dans la barre `a droite de lediteur, vous pouvez voir des
avertissements en rouge qui indiquent des erreurs de syntaxe. Des avertissements en orange sont `a prendre au
serieux si vous voulez que votre programme soit ecace.
2.b. Scripts & fonctions
Script
Un script est une collection dinstructions qui seront executees de haut en bas et de gauche `a droite. En
sauvegardant le script sous le nom mon1erscript.m dans le repertoire de travail actuel, nous pouvons executer
toute la serie de commandes incluse dans le script en ecrivant >> mon1erscript + exec `a la ligne de commande.
Exemple, si on entre le code
% courbe sinus
x=linspace(0,10*pi,100);
y=sin(x);
plot(x,y,ro)
xlabel(x)
ylabel(y)
legend(sin) grid on
dans lediteur de Matlab et si on le sauvegarde dans un chier au nom courbe1.m, nous allons pouvoir acher
la courbe et ajouter toutes les infos, en appelant seulement >> courbe1 `a la ligne de commande. La premi`ere
ligne, precedee ici par un %, sera un commentaire reserve `a vos yeux.
Un script, cest donc une serie dinstructions que vous lancez en une fois. De cette mani`ere, un script verra
toutes les variables precedemment introduites dans le workspace de Matlab. De la meme mani`ere, toutes les
variables intermediaires generees par le script seront globales, cest `a dire consultables et utilisables
apr`es execution du script.
Dans un programme un peu plus long, la majorite des variables intermediaires sera par contre sans interet. En
plus vous pouvez facilement avoir des conits en reutilisant des variables qui nont par exemple pas la bonne
valeur. La bonne pratique voudra que, lors de lutilisation dun script, vous mettez clear en debut de tout
script qui na pas besoin dagir sur dautres variables du workspace.
Fonctions
Une fonction est un petit programme un peu plus abouti quun script. La dierence principale est quune fonction
recoit une ou plusieurs entrees et renvoie une ou plusieurs sorties. Contrairement aux scripts, une fonction ne
voit que ses variables dentree et ne sort que ses variables de sortie. Toutes les variables intermediaires qui ne
sont pas exportees seront eacees apr`es execution de la fonction : les variables sont donc locales.
Pour permettre `a Matlab de distinguer les fonctions des scripts, il faut suivre quelques petits r`egles. Donnons
un exemple dune fonction qui va tracer la fonction sin(t) pour variable et t [0, 10]. Le code
function [t,y]=tracesinus(omega)
% fonction pour tracer sin(omega t ) avec omega variable
t=linspace(0,10,1000);
y=sin(omega*t);
9
plot(t,y)
end
sera interprete comme une fonction par Matlab, si on le sauvegarde sous le meme nomici donc tracesinus.m
et si la premi`ere ligne commence avec le mot function. Ensuite on met toutes les variables de sortie (sil
y en a) entre crochets, = , le nom de la fonction et entre parenth`eses les variables dentree (separees par des
virgules sil y en a plusieurs).
Nous pouvons utiliser cette fonction dans un autre programme ou aussi `a la ligne de commande. En ecrivant
par exemple
>> [temps,f]=tracesinus(1);
nous allons dessiner la courbe avec = 1. Pour executer une fonction, on doit donc donner des valeurs
numeriques aux arguments. Les sorties t et y de la fonction seront enregistrees dans les variables temps et
f et resteront dans le workspace. Lavantage dune fonction est quelle est tr`es exible `a la reutilisation. Par
exemple, avec
>> [t,f1]=tracesinus(1); hold all
>> [t,f2]=tracesinus(2);[t,f3]=tracesinus(3); hold off
On gen`ere les trois courbes sin t, sin 2t, sin 3t sur un meme graphique en utilisant la meme fonction. Un autre
avantage visible ici est que nous navons pas eu besoin de changer les noms dans le code meme de la fonction,
pour generer des sorties avec dautres noms f1,f2,f3. Finalement, mais peut-etre pas tout `a fait pertinent pour
ce premier exemple : une fonction ne polluera pas le workspace avec des variables intermediaires inutiles.
Matlab naimera pas votre appel `a la fonction, si vous ne donnez pas tous les arguments. Il ne sera pas contre
le fait de ne pas attribuer toutes les variables de sortie, soit :
>> tracesinus(1) %marchera
>> [t,s]=tracesinus %ne marchera pas
Une erreur classique de debutant est quil faut absolument eviter decraser les entrees dune fonction, si on veut
lutiliser comme une fonction exible. Lexemple
function [t,y]=tracesinus(omega)
omega=1; % a ne pas faire !
t=linspace(0,10,1000);
y=sin(omega*t);
plot(t,y)
end
en donne une illustration. Quel que-soit largument omega que lon donne `a la fonction, omega=1 dans le pro-
gramme.
Fonctions ou scripts : que choisir ?
Une fonction sera preferable si nous voulons utiliser un meme programme pour dierentes valeurs des entrees
ou si nous ne voulons pas etre embetes par un trop grand nombre de variables intermediaires.
Un script sera utile pour garder une trace des calculs eectues et pour generer des variables que vous voulez
consulter apr`es. Generalement, on utilise des scripts pour lancer des fonctions.
La programmation de scripts est assez lineaire. Toutes les variables sur lesquelles vous agissez doivent etre
chargees avant de pouvoir operer dessus. La programmation de fonctions est un peu plus abstraite, car on doit
les programmer de mani`ere `a ce que toute linformation necessaire puisse se deduire des variables dentree.
2.c. Boucles
Les boucles permettent dexploiter un point fort que les ordinateurs poss`edent et nous pas du tout : faire un
grand nombre de calculs simples `a tr`es grande vitesse. On distingue deux types de boucles que lon retrouve
dans chaque langage de programmation.
10
Boucles inconditionnelles for
Repeter une operation un certain nombre de fois. Si on veut par exemple les N = 100 premiers termes dune
suite u
n+1
= cos(u
n
) avec n 1, 2, . . . , 100 partant de u
1
= 0.5, on va utiliser une boucle inconditionnelle.
Voici un script qui realise cet exploit :
N=100;
U=zeros(N,1); % initialisation dun vecteur colonne
U(1)=0.5; % premier point
for n=2:N
U(n)=cos(pi*U(n-1));
end
A chaque passage dans la boucle, n va augmenter de 1, pour calculer le prochain element de la suite. Linitiali-
sation du tableau U avec des zeros partout nest pas obligatoire, mais sera une r`egle de bonne conduite car cette
procedure permet un gain de temps tr`es important (lediteur marquera un avertissement si vous ne le faites
pas).
Lors de la programmation de ce type de boucles, les erreurs les plus typiques sont liees aux indices qui atteignent
des valeurs non admises. Dans lexemple precedent il est par exemple tr`es important de faire demarrer la boucle
`a n = 2 pour ne pas ecraser la premi`ere valeur, pour ne pas demander `a Matlab dutiliser lelement U(0) quil
ne connait pas (les indices sont des entiers positifs). On doit egalement arreter la boucle `a n = N, sinon on
depasserait le tableau initialise au depart.
Il ny a aucun probl`eme `a imbriquer des boucles dierentes. Par exemple :
N=100;
A=zeros(N,N)
for n1=1:N
for n2=1:N
A(i,j) = i + j;
end
end
remplira une matrice A, tel que lelement sur la i-i`eme ligne, j-i`eme colonne de A, sera i +j. Si vous imbriquez
beaucoup de boucles, alors meme un ordinateur va commencer `a avoir du mal `a terminer les calculs. En Matlab,
une r`egle `a suivre : si vous pouvez faire un calcul avec un vecteur ou une matrice `a la fois, alors il faut preferer
ceci par rapport aux boucles. Le gain de vitesse sera spectaculaire.
Finalement, on peut utiliser des tableaux quelconques pour xer comment le param`etre controlant la boucle
varie :
for par=[0.1,0.5,0.9,pi]
...
end
ici la boucle fera 4 iterations, avec une variable par qui prendra successivement les valeurs du tableau [0.1,0.5,0.9,pi].
On peut forcer de quitter une boucle `a laide de la commande break, mais comme ceci ne se fera generalement
que sous certaines conditions, il est preferable dutiliser une boucle conditionnelle.
Boucles conditionnelles while
Une boucle conditionnelle continuera `a tourner tant quune condition est satisfaite. Pour aller une premi`ere fois
dans la boucle, il faut faire en sorte que la condition soit satisfaite au depart, ce qui veut dire quil faut initialiser
la condition. Ensuite, quelque part dans la boucle, il faut une condition qui sera mise `a jour pour pouvoir sortir
de la boucle `a un moment donne.
Donnons un exemple. Nous voulons calculer la somme dune suite convergente
S = lim
N+
N

n=1
cos(n)/n
2
En pratique, on ne peut pas evaluer la somme pour N +, mais on peut evaluer S jusqu`a une certaine
precision en choissant N ni. On propose, `a chaque iteration dajouter un nouveau terme `a la suite tant que
lamplitude de ce nouveau terme reste plus grand que la precision (prec) requise (premi`ere condition). Pour
11
eviter davoir une boucle qui fait trop diterations (qui tourne inniment si la suite diverge) nous ajoutons une
condition supplementaire : pas plus que 1000 iterations (deuxi`eme condition). Voici un script qui permet de
faire cette tache :
prec=1e-6; % precision
newterm=1; % initialisation pour aller dans la boucle
n=1; % compteur
S=0; % initialisation de la somme
while (newterm>prec)&&(n<1000) % tant que condition 1 ET condition 2
newterm=cos(pi*n)/n2;
S=S+newterm;
n=n+1;
end
S % afficher S
Il faut faire attention avec les boucles conditionnelles, car on peut tr`es facilement programmer des boucles in-
nies. Si votre calcul dure trop longtemps, vous pouvez larreter en cliquant dans command window et Control+C.
2.d. Tests
Test if - elseif - else
Dans un programme, on doit souvent selon un crit`ere faire soit une premi`ere, soit une deuxi`eme directive. Pour
cette raison, il existe la structure du test. Ci-dessous une fonction qui recoit un tableau de x et un tableau de
meme dimension y. La fonction ache la courbe y en fonction de x, point par point, en couleur rouge si la
valeur de la fonction en ce point est plus grande que zero, en bleu si la fonction y est plus petite que zero et en
vert si la fonction y est zero.
function plotcoul(x,y)
for t=1:length(x) % pour tous les points du tableau x (et y)
if y(t)>0 % si plus grand que zero
plot(x(t),y(t),.r) % afficher en rouge
elseif y(t)<0 % si plus petit que zero
plot(x(t),y(t),.b) % afficher en bleu
else % sinon (egal a zero donc)
plot(x(t),y(t),.g) % afficher en vert
end
hold on
end
hold off
end
Nous ne sommes pas obliges dorir des alternatives. Si vous orez des alternatives multiples, sachez quelles
seront parcourues de haut en bas. On peut facilement programmer une condition qui ne pourra jamais etre
satisfaite.
Multichoix switch
Matlab permet de programmer un switch qui va en fonction de la valeur dune variable, eectuer dierentes
instructions. Consultez les documentations si ceci vous interesse, mais nous naurons pas besoin de ces tests
multichoix pendant les TPs.
12
2.e. Exercices
Les exercices sont classes par diculte croissante et couvrent la programmation de scripts et de fonctions.
1. (facile) On denit la suite de Fibonacci, telle que u
1
= 1, u
2
= 1, et u
n+1
= u
n
+ u
n1
pour tout n 3.
Ecrire un script qui permet de calculer la suite et de la tracer en fonction de n.
2. (facile) Le developpement limite de la fonction e
x
est
e
x
= lim
N+
N

n=0
x
n
n!
.
On souhaite etudier la convergence de cette somme pour x = 1. On note e
N
lapproximation pour e
obtenue par la somme partielle qui sarrete au N-i`eme terme. (doc factorial(n).) Faire un script dans
lequel on produit une courbe qui montre e
N
en fonction de N pour N = 0, . . . , 30.
3. (intermediaire) Ecrire un script permettant de calculer et dacher les N premi`eres lignes du triangle de
Pascal (ici pour N = 5) :
1 0 0 0 0
1 1 0 0 0
1 2 1 0 0
1 3 3 1 0
1 4 6 4 1
Le triangle de Pascal P(i, j) est tel que P(i, j) = P(i 1, j 1) + P(i 1, j) o` u j i, avec P(i, 1) = 1
pour tout i. On mettra des zeros dans le triangle superieur P(i, j) = 0 si j > i.
4. (facile) Faire une fonction compte qui re coit une matrice X et renvoie le nombre N dentrees de X, qui ont
des valeurs comprises entre -1 et 1.
5. (facile) Programmer une fonction renverse qui renvoie le vecteur b tel que ses elements soient ceux de a
re-ordonnes ` a lenvers.
6. (facile) Programmer une fonction geomean qui renvoie la moyenne geometrique des elements du vecteur x
(cest-`a-dire m = (x(1)x(2)..x(N))
1/N
, o` u N est la longueur de x).
7. (facile) Programmer une fonction polymorceau : une fonction qui renvoie un vecteur Y dont les elements
sont donnes par x
2
pour chaque element x 0 du vecteur X, et x pour chaque element x < 0 de X.
Tracer le resultat pour x [1, 1].
8. (intermediaire) La fraction continue
arctan x =
x
1 +
(x)
2
3+
(2x)
2
5+
(3x)
2
7+
(4x)
2
9+...
permet dobtenir des approximations successives de la fonction arctan en sarretant `a un certain niveau.
Les approximations aux ordres N = 0, 1, 2 seront alors
N = 0 , arctan x = x/1
N = 1 , arctan x = x/(1 +x
2
/3)
N = 2 , arctan x = x/(1 +x
2
/(3 + (2x)
2
/5)
Trouvez un algorithme qui vous permet dobtenir des estimations successives de pour N = 0 `a 19.
Comparer `a la valeur enregistree dans Matlab pour denir une erreur. Faire un script qui ache lerreur
en fonction de N en utilisant une echelle logarithmique sur laxe y.
9. (intermediaire) On souhaite visualiser la trajectoire dune bille qui rebondit de facon elastique sur le sol.
On note (x, z) le plan vertical, avec le sol situe en z = 0, et la gravite est g = ge
z
. Entre 2 rebonds
successifs, la position de la bille est donnee par
x(t) = u
x
t , z(t) = u
z
t
1
2
gt
2
,
avec u
x
> 0 et u
z
> 0 les composantes selon x et z de la vitesse initiale (u
z
est la vitesse de la bille au
moment o` u elle quitte le sol). Dans ces equations, le temps t est compte depuis le moment du dernier
rebond. A chaque rebond, la vitesse verticale doit diminuer de 10% pour simuler leet dune dissipation.
Ecrire une fonction Matlab rebonds qui calcule et montre la trajectoire de la bille sur N rebonds. La bille
sera representee par le symbole o.
13
10. (intermediaire) Soit F un vecteur qui contient un signal pour des temps discrets t, issu par exemple dune
experience. Faire une fonction filtre qui lisse ce signal en rempla cant le signal en tout point, par la
valeur moyenne la fonction en ce point et celles des 2N voisins des deux cotes. Trouver un moyen, pour
traiter les debut et n des signaux. Tester la fonction avec un signal forme par un sinus + un petit bruit
Gaussien (doc randn)
Etape 0
Etape 1 Etape 2
....
....
11. (dicile) Nous souhaitons une fonction Matlab flocon qui calcule et ache les N etapes successives
permettant de construire un ocon de neige fractal, obtenu par des iterations comme speciees dans la
gure ci-dessus.
14
TP 3. Ondes propagatives & Interferences
Dans ce TP, nous etudions la propagation des ondes et le phenom`ene de linterference et de la diraction `a
laide danimations en Matlab.
3.a. Animations en direct
Pour faire une animation en Matlab, on recalcule et on ache une nouvelle image `a linterieur dune boucle.
A la n des lignes de commande qui gen`erent limage, on ajoutera une des deux commandes pause (attend
lappui dune touche), ou drawnow (rafrachit la gure pour une animation en continu), sinon le programme
nachera que la derni`ere image de lanimation.
3.b. Ondes `a 1 dimension
On consid`ere dans un premier temps une onde propagative `a 1 dimension, de longueur donde , de periode T
et damplitude A, se propageant vers les x croissants :
u(x, t) = Acos(kx t) = Acos
_
2

(x ct)
_
.
k = 2/ est le nombre donde et = 2/T la pulsation. La grandeur u peut representer la pression dans le
cas dune onde acoustique, une composante du champ electrique dans le cas dune onde electromagnetique (la
lumi`ere par exemple), ou encore la deviation transverse dune corde pour une onde mecanique. La vitesse de
propagation (ou vitesse de phase) est donnee par c = /k = /T. Dans le cas dune onde non dispersive (cas
considere dans ce TP), cette vitesse de phase est une constante independante de la longueur donde.
1. Realiser une animation de londe, en faisant varier le temps t par petits intervalles dune image `a lautre.
Choisir les param`etres, tels que limage varie susamment lentement.
2. Une onde stationnaire par exemple la vibration dune corde de guitare est la superposition dune onde
propagative droite (de celerite c) et dune onde propagative gauche (de celerite c). Pouvez-vous le
verier visuellement ? Que se passe-t-il si les deux ondes nont pas la meme amplitude ?
3.c. Ondes circulaires `a 2 dimensions
On consid`ere maintenant une onde propagative circulaire `a 2 dimensions, excitee par une source ponctuelle
situee en (x
s
, y
s
). Il peut sagir dune onde electromagnetique emise par une antenne dans un plan, ou bien
dune vague `a la surface de leau engendree par la chute dune goutte. En coordonnees polaires, londe est
maintenant decrite par (r = 0) :
u(r, , t) =
A

r
cos
_
2

(r ct)
_
o` u r est la distance `a la source, r =
_
(x x
s
)
2
+ (y y
s
)
2
. Langle nintervient pas car londe se propage de
la meme facon dans toutes les directions. Le facteur 1/

r est une consequence de la conservation de lenergie


(en eet, le ux denergie sur un cercle de rayon r moyenne sur une periode, qui est egal `a 2ru
2
(r, t), doit etre
independant de r). La fonction nest pas denie en r = 0 (divergence de lenergie).
1. On consid`ere une region carree du plan, de dimension [0, 1] [0, 1], sur laquelle on va visualiser londe. On
place une source ponctuelle au centre du domaine, en (x
s
, y
s
) = (1/2, 1/2). On souhaite visualiser, pour
linstant t = 0 xe, limage dune onde de longueur donde = 0.1.
2. Realiser maintenant une animation de cette meme onde. Faites varier la longueur donde, la celerite, et
observer les resultats. Fixer lechelle de couleurs.
3. Realiser maintenant une animation de linterference de deux ondes emises depuis deux sources ponctuelles,
placees en (0.3, 0.5) et (0.7, 0.5). Observer les gures obtenues lorsque la longueur donde est petite,
comparable ou grande par rapport `a la distance entre les deux sources. Commentez.
15
Figure 1 Interference dondes circulaires emanant de sources ponctuelles
3.d. Diraction dune onde plane
Nous voulons simuler la diraction dune onde plane passant `a travers un orice. Le principe de Huygens sur
la superposition des ondes, nous apprend quon peut simuler un front donde plan, par un ensemble de sources
ponctuelles.
1. Placer un nombre susant de sources le long dun orice `a gauche du domaine x
s
= 0, y
s
[0.4, 0, 6].
2. Observez si vous reconstruisez bien une onde plane proche de lorice, ainsi que la gure de diraction
sous lorice.
Figure 2 Diraction dune onde plane qui passe `a travers une orice
16
TP 4. Evolution chaotique dune population
Nous demandons un compte rendu de ce TP : suivre les modalites enonces en preface.
4.a. Introduction : Evolution dune population
Nous decrivons levolution de la population de bacteries en la considerant de generation `a generation, pour
des temps discrets. Nous notons le nombre dindividus x
n
`a la n`eme generation et ce nombre dindividus est
normalise de telle sorte que x
n
[0, 1]. Si x
n
= 0, il ny a plus dindividus, x
n
= 1 correspond `a un milieu
sature. Un mod`ele simple pour cette evolution est donne par la suite logistique :
x
n+1
= r x
n
(1 x
n
)
avec r [0, 4]. Le membre `a droite de lequation est compose de deux termes `a linterpretation suivante.
Une population pourra augmenter si r > 1 `a cause du terme rx
n
(naissances), mais si le nombre dindividus
commence `a etre trop grand, on perdra des individus `a cause du terme rx
2
n
(mortalite par trop grand nombre
dindividus).
Dependant de la valeur de r, une population dindividus va seteindre, se stabiliser, osciller periodiquement entre
dierentes valeurs ou evoluer de mani`ere chaotique. Nous cherchons `a decrire cette dynamique de population
dans ce TP.
4.b. Etude des iteres successifs
1. Ecrire une fonction X=population(r,N,x1) qui renvoie le vecteur ligne X des N premiers iteres de la suite
x commencant par x1 et pour un taux de reproduction r.
2. Utiliser cette fonction pour representer (sur la meme gure) x
n
en fonction de n pour 6 dierentes valeurs
de r entre 0 et 4. Nutilisez pas plus que N = 100 points. Commentez.
3. Que pensez-vous de linuence de la condition intiale x
1
`a r xe ?
4. Dans le cas doscillations periodiques, reperer, pour 3 < r < 3.6, deux valeurs de r pour lesquelles la
population change de periodicite.
4.c. Diagramme de bifurcation (compte rendu `a faire)
Pour synthetiser les observations precedentes, on va chercher `a construire le diagramme de bifurcation, qui
represente un ensemble de valeurs visitees par la suite x
n
en fonction de r, une fois la condition initiale oubliee.
1. Utilisant la fonction population ecrite precedemment, faire une boucle sur r, et acher `a chaque fois len-
semble des valeurs visitees pour chaque valeur de r. On fera varier r entre 0 et 4, par pas dr judicieusement
choisis.
2. Proposez une amelioration du diagramme de bifurcation, dans lequel le transitoire initial ne surcharge pas
limage.
Figure 3 Diagramme de bifurcation obtenu sur lecran dun oscilloscope en utilisant un LASER chaotique
(M. Lefranc, Univ. Lille, 2007)
17
4.d. Sensibilite aux conditions initiales
Une propriete remarquable de cette suite dans le regime chaotique est sa sensibilite aux conditions initiales :
partant de deux conditions initiales tr`es proches, separees de x
1
1, lecart entre les deux evolutions x
n
=
|x
(2)
n
x
(1)
n
| augmente exponentiellement ave n. Mettez en evidence ce phenom`ene. Montrer graphiquement
que, pour une precision donnee sur la condition initiale, il existe un nombre diterations N au-del`a duquel le
comportement de la suite est imprevisible.
Facultatif : Diagramme en escargot
Faire une fonction capable de produire le diagramme en escargot (ci-dessous) pour r variable. Pour cela, on
tracera dans une meme gure la courbe f(x) = r x(1 x), la droite y = x ainsi que la ligne brisee qui joint les
points (x
1
, 0), (x
1
, f(x
1
)), (x
2
, x
2
), (x
2
, f(x
2
))...
0 0.2 0.4 0.6 0.8 1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
x
n
x
n
+
1


x = x
f(x)=r x (1x)
escargot
Figure 4 Diagramme en escargot : un moyen graphique pour comprendre la dynamique dans les suites iterees.
18
TP 5. Diusion & Marcheurs aleatoires (compte rendu `a faire)
Les marcheurs aleatoires simulent le mouvement Brownien de traceurs microscopiques sous leet des uctuations
thermiques. Ils nous orent une explication microscopique du phenom`ene macroscopique de la diusion. Dans ce
TP, nous programmons un marcheur aleatoire en deux dimensions et nous etudions le comportement statistique
dun grand nombre (un ensemble) de marcheurs.
5.a. Marcheurs aleatoires en deux dimensions
Notre marcheur aleatoire se prom`enera sur un plan x-y en deux dimensions. Chaque pas sera de longueur
unite, mais la direction dans le plan x-y est aleatoire. Si nous notons p
x
(t) et p
y
(t) les deplacements selon x et
y suite au t-i`eme pas, nous pouvons denir ces pas aleatoires ainsi :
p
x
(t) = cos (t) , p
y
(t) = sin (t)
o` u t = 1 `a N. Les arguments (t) sont des nombres aleatoires uniformement distribues dans lintervalle [0, 2].
La commande rand permet de faire des nombres aleatoires uniformement distribues entre 0 et 1. Consultez la
documentation pour trouver la syntaxe permettant de creer les listes (t) pour t = 1, . . . , N.
Une fois que les tableaux contenant les N pas sont species, il nest pas dicile de calculer une marche partant
de lorigine 0. La recette :
x(t) = x(t 1) +p
x
(t)
y(t) = y(t 1) +p
y
(t)
, t = 1, . . . , N
Tous les marcheurs partiront de lorigine x(0) = 0 , y(0) = 0 mais ce point initial ne fera pas partie de la marche
calculee `a laide de Matlab. (Lindice 0 nexiste pas en Matlab)
1. Creer une fonction [x,y]=march2d(N) qui prend comme valeur dentree le nombre de pas N dune marche
aleatoire. A la sortie nous trouvons les coordonnees de la marche x et y sous forme de vecteurs colonnes
de N points.
2. Utiliser la fonction pour calculer 3 marches aleatoires de 1000 pas. Acher les marches aleatoires dans le
plan x-y en utilisant des couleurs dierentes pour chaque realisation. Ajouter une legende, un titre et le
nom des axes.
5.b. Animation dun ensemble de marcheurs
Nous voulons etudier le comportement collectif dun grand ensemble de marcheurs aleatoires pour faire le lien
avec la diusion. Pour cela il sera necessaire de calculer un grand nombre de marcheurs aleatoires demarrant
tous du meme point.
1. Creer une nouvelle fonction [gx,gy]=march2dstat(N,M) qui prend en entree le nombre de pas N, mais
aussi le nombre M de marcheurs independants souhaites. gx et gy sont deux matrices de taille N x M
qui contiennent sur leurs M colonnes les N coordonnees successives des dierents marcheurs aleatoires.
2. Tester la nouvelle fonction pour des petites valeurs de M et N. Calculer ensuite un nombre consequent
de marches M = 100 `a 1000 de N = 100 `a 1000 pas.
3. Faire une animation dans laquelle vous suivez les positions des M marcheurs aux cours du temps t.
Observer que la position moyenne de lensemble des marcheurs reste proche de zero, mais que la zone
exploree par les marcheurs augmente progressivement et de mani`ere isotrope au cours du temps (de la
meme mani`ere dans toutes les directions du plan).
4. Faire le lien avec la diusion de particules dencre sur une feuille de papier.
19
25 20 15 10 5 0 5 10 15 20 25
25
20
15
10
5
0
5
10
15
20
25
x
y


marche aleatoire
pas 1
pas 1000
Figure 5 (gauche) Exemple dune marche aleatoire de 1000 pas (droite) Diusion dune goutte dencre sur
du papier (Andi Lis blog).
5.c. Etude statistique
Un traitement statistique des tableaux gx et gy permet de quantier les observations precedentes. Si nous
notons les dierentes marches independantes x
r
(t) et y
r
(t) r = 1, . . . , M, alors la position moyenne et lecart
quadratique obtenus en moyennant sur lensemble des particules sont denis comme :
x(t) =
1
M
M

r=1
x
r
(t) , y(t) =
1
M
M

r=1
y
r
(t) , r
2
(t) =
1
M
M

r=1
x
2
r
(t) +y
2
r
(t)
Comme la moyenne se fait sur les M dierentes realisations, on obtiendra par cette procedure des valeurs pour
chaque temps t = 1, . . . , N. On peut donc etudier comment les moyennes densembles varient au cours du temps.
1. Disposant des matrices gx et gy, il sut dutiliser la commande mean(A,dim) de la bonne mani`ere pour
calculer ces 3 quantites statistiques au cours du temps. Trouver comment.
2. Montrer graphiquement que les positions moyennes x(t) et y(t) restent proches de lorigine pour tout
temps t comme lavait indique lanimation.
3. Acher lecart quadratique moyenne r
2
(t) en fonction du temps t, pour trouver une loi de diusion :
r(t)
2
= 2Dt
Le rayon carre de la zone exploree en moyenne par lensemble des marcheurs evolue lineairement au cours
du temps. Mesurez le coecient de diusion D de notre simulation.
20
TP 6. Desintegration radioactive
6.a. La desintegration radioactive
Un atome radioactif peut se desintegrer naturellement au cours du temps. Cest le cas par exemple de lisotope
14
C (carbone 14), qui se desint`egre en
12
C (carbone 12, le carbone classique), sur une echelle de quelques mil-
liers dannees. Pour un atome de
14
C isole, il nest pas possible de prevoir quand exactement cette desintegration
aura lieu. En revanche, pour un ensemble datomes, on peut predire statistiquement levolution du nombre
datomes qui ne se sont pas encore desintegres :
N(t) = N
0
e
t
, (1)
avec N
0
le nombre initial datomes (`a t = 0), et une constante qui depend de latome considere. On denit en
general la demi-vie , telle que N() = N
0
/2, ce qui donne
=
ln 2

.
Dans le cas de la desintegration
14
C
12
C, la demi-vie correspondante est de = 5700 ans, ce qui en fait un
outil de datation pratique pour larcheologie.
Dans ce TP, nous allons reproduire numeriquement cette loi de decroissance radioactive par deux methodes :
Monte-Carlo et par resolution dune equation dierentielle.
...
9 8 7 5 1
dt dt dt dt dt
t
N =
Figure 6 Lidee de la methode Monte-Carlo : `a chaque pas de temps il y a une probabilite non-nulle quun
atome se desint`egre. En representant un atome par 1 et pas datome par 0 dans un vecteur, on compte facilement
le nombre datomes au cours du temps.
6.b. Resolution par la methode de Monte-Carlo
Une methode Monte-Carlo consiste `a resoudre un probl`eme par tirages aleatoires. Dans cette approche, on
consid`ere N
0
atomes, chaque atome a(i) etant represente par un nombre binaire, 1 (atome pas encore desintegre)
ou 0 (atome desintegre). On discretise le temps par intervalles dt. A chaque pas de temps, un atome donne i
sera desintegre avec une probabilite dt.
Realiser la simulation numerique decrivant levolution temporelle du nombre datomes N(t) pas encore desintegres,
et observer levolution de N(t) en fonction de t pour dierentes valeurs du nombre datomes initial N
0
(de lordre
de 10, 100, 1000...) Ajouter sur les memes courbes la loi theorique (1) avec une couleur dierente.
Remarque : etant donnee la valeur de , il est pertinent de choisir lannee plutot que la seconde comme
pas de temps dt dans ce probl`eme.
6.c. Resolution directe de lequation dierentielle
Lorigine de la loi exponentielle (1) est la suivante : Pour un nombre datomes N(t) `a un instant t donne, le
nombre datomes qui va se desintegrer entre t et t + dt est proportionnel `a N et `a dt ; ce nombre datomes est
21
donne par Ndt. Le nombre datomes restants N(t) va donc diminuer dune quantite
dN = Ndt.
Il sagit dune equation dierentielle lineaire du premier ordre, dont la solution bien connue est (1).
Implementer sous Matlab la resolution de cette equation dierentielle, et verier que la solution numerique
concide bien avec la solution analytique (on pourra calculer lecart entre les 2 solutions pour caracteriser
lerreur dintegration).
Facultatif : Desintegration multiple
Dans certains cas, la desintegration dun isotope peut donner lieu `a un nouvel isotope lui-meme radioactif,
pouvant `a son tour se desintegrer. Ainsi, si lon a la sequence A B C, on peut generaliser lequation
dierentielle precedente au syst`eme dequations dierentielles :
dN
A
=
A
N
A
dt,
dN
B
=
A
N
A
dt
B
N
B
dt.
Dans ce cas, la condition initiale t = 0 est N
A
(0) = N
0
et N
B
(0) = 0. An de resoudre numeriquement un tel
syst`eme, on reprend la methode precedente, mais la fonction scalaire y(t) doit etre representee par une fonction
vectorielle Y (t), o` u Y est un vecteur `a deux composantes, Y = [N
A
, N
B
]
T
.
Ecrire le syst`eme dierentiel sous la forme
dY/dt = MY,
o` u M est une matrice 22 dont on identiera les elements. Integrer ce syst`eme numeriquement pour dierentes
valeurs de
A
et
B
, et observer levolution des 2 populations disotopes. Commentez.
Annexe : Resolution dun syst`eme dEDO sous Matlab
Pour integrer un syst`eme dequations dierentielles ordinaires (EDO) du type y

= f (t, y), o` u y

= dy/dt, avec
y = [y
1
, y
2
, . . . , y
n
]
T
et f = [f
1
, f
2
, . . . , f
n
] il faut
1. Creer une fonction Matlab dans laquelle est code f(t, y), par exemple dans un chier f.m. Attention :
lordre des arguments dentree, (t, y), est important. Meme si la fonction ne depend pas de t (syst`eme
dit autonome), la fonction doit quand meme avoir ces 2 arguments dentree. Lentree y est un vecteur
colonne de taille et la sortie f aussi.
2. Passer la fonction comme argument `a un solveur dequation dierentielle, `a laide de loperateur @. Le sol-
veur usuel est ode45 (Runge-Kutta explicite), qui permet dintegrer la plupart des equations dierentielles
avec une bonne precision. La syntaxe est :
[t, y] = ode45(@F,temps,y0)
o` u nous avons le choix entre temps=[t0 tf], lintervalle de t sur lequel y doit etre calcule, ou temps=t0:inc:tf,
les temps sur lesquelles la solution est souhaitee. y0 = y(t0) est la condition initiale sous forme dun vec-
teur colonne.
Sil y a juste une EDO du premier ordre, on utilise exactement la meme procedure, evidemment sans faire appel
` a des vecteurs colonnes.
22
TP 7. Trajectoires dune balle de tennis (compte rendu `a faire)
On souhaite etudier linuence du frottement de lair sur la trajectoire dune balle de tennis. Si la balle de tennis
ne tourne pas (pas de spin), elle tombera sous linuence de la gravite et sa vitesse horizontale diminuera `a cause
des frottements dans lair. Si la balle tourne, on aura une force supplementaire, qui vient de leet Magnus.
7.a. Principe fondamental de la dynamique
On souhaite etudier linuence du frottement de lair sur la trajectoire dune balle de tennis de rayon R = 3.35 cm
et de masse m = 58 g. On note r = xe
x
+ ze
z
le vecteur position dans le plan vertical, et g = ge
z
la gravite.
Le Principe Fondamental de la Dynamique secrit
m
d
2
r
dt
2
= mg +

F
f
+

F
m
,
o` u

F
f
= C
x
A
1
2

a
|v|v,
est la force de frottement avec lair. On appelle C
x
le coecient de tranee, A la surface frontale (surface
du projectile perpendiculaire au deplacement), et
a
= 1.2 kg/m
3
la masse volumique de lair. A susamment
grande vitesse, le coecient de trainee est egal `a C
x
= 0.4 pour une sph`ere. La deuxi`eme force

F
m
= S v
est la force de Magnus. A cause de la rotation de la balle, que lon supposera = e
y
, un dierentiel de pression
entre le haut et le bas de la balle sera induite. Ceci induit une force verticale, qui va selon la rotation de la balle
pouvoir faire descendre la balle (topspin), ou la garder plus longtemps dans lair (underspin). Les joueurs de
tennis ou de tennis de table seront tr`es familiers avec cet eet. On utilisera la valeur S/m = 5 10
3
. Le spin
sera varie entre dierentes simulations, mais ne diminuera pas au cours du temps.
La balle est lancee du point x = 0, z = h
0
, avec une vitesse initiale v
0
= v
0
(cos e
x
+ sin e
z
).
7.b. Syst`eme sans spin
1. Si on neglige les frottements, on peut deriver une expression analytique (x(t), z(t)) de la trajectoire de la
balle. Trouver cette expression, car elle permettra de tester la solution numerique.
2. En posant le vecteur Y = [x, z, u, v]
T
= [y
1
, y
2
, y
3
, y
4
]
T
, avec u = dx/dt et v = dz/dt, re-ecrire lequation
de Newton comme un syst`eme dierentiel du 1er ordre de dimension 4 (reduction dordre) de la forme
canonique :
dY
dt
= F(Y).
3. Coder sur Matlab, avec laide du solver ode45, la resolution de ce syst`eme. Consultez lannexe du TP
precedent, si vous ne savez plus comment faire.
4. Representer graphiquement la trajectoire (jusqu`a limpact avec le sol en z = 0) pour des coecients de
frottement C
x
= 0 0.1 0.2 0.3 0.4. Utilisez des vitesses initiales de lordre de 50 100 150km/h.
5. Ajouter dans le meme gure, la solution analytique obtenue en absence de friction et verier que lon
reproduit bien la bonne trajectoire.
6. Que se passe-t-il avec la balle de tennis si le coecient de friction est tr`es grand.
7. Tracer sur un meme graphique lenergie cinetique, lenergie potentielle de pesanteur, et lenergie mecanique
totale. Commenter ces courbes dans les cas avec (C
x
= 0.4) et sans frottement.
23
7.c. Syst`eme avec spin
1. Ajouter la force de Magnus dans la fonction qui calcule le cote droit de lequation dierentielle.
2. Faire une gure qui montre dierentes trajectoires dans de lair, avec et sans rotation ?
3. Au del`a dun certain underspin, la force de Magnus devient trop grande pour encore etre physiquement
realiste. Expliquer pourquoi `a laide dune gure.
Facultatif : attenuation de la rotation
Pour linstant nous ne varions pas la rotation de la balle de tennis au cours du temps, mais on sait que celle-ci
sera egalement attenuee par les frottements avec lair. Proposez un mod`ele pour cette attenuation et implementer
le sous matlab. Reconsid`erer le cas o` u le trajectoire etait devenue irrealiste `a cause dun underspin trop eleve.

F
m

F
m
Figure 7 Ecoulement autour dune balle de tennis. (haut) une balle qui ne tourne pas sera attenuee par les
frottements avec lair induite par le sillage (wake) turbulent. (milieu) Pour une balle qui tourne dans le sens des
aiguilles dune montre (ici underspin), le sillage se deplace vers le bas. Par conservation de force, ceci va de pair
avec une force de poussee vers le haut (eet Magnus). (bas) Dans le cas inverse (topspin), il y aura une force
verticale vers le bas.
24
TP 8. Thermodynamique hors equilibre (compte rendu `a faire)
On consid`ere un gaz parfait bi-dimensionnel contenu dans une bote de dimension [0, 1] [0, 1]. Cette bote est
separee en son milieu (en x = 1/2) en deux compartiments par une paroi percee dun trou centre, de taille D.
On note (1) la partie gauche, et (2) la partie droite de la bote. Lobjectif est detudier numeriquement la facon
dont ce syst`eme, partant dune situation hors dequilibre, atteint lequilibre thermodynamique.
0 1
0
1
x
y
D
v
1
v
2
v
3
v
4
v
5 v
6
Figure 8 Gaz parfait dans une bote compartimentee. Ici, la molecule numero 6 va passer de gauche `a droite,
ce qui va uniformiser les densites dans chaque compartiment.
8.a. Trajectoire rectiligne dune molecule unique
On commence par considerer le mouvement rectiligne dune molecule unique et pour linstant on oublie les
parois. Nous voulons que la particule ait une position initiale aleatoire dans la partie gauche de la
bote et une vitesse aleatoire normalement distribuee. Completer linitialisation de la boucle dans la
fonction ci-dessous.
function [X,Y]=parttrack(N,dt)
% initialisation
X=zeros(N,1);Y=zeros(N,1);
x=... % completer
u=... % completer
y=... % completer
v=... % completer
X(1)=x; Y(1)=y;
for t=2:N
% calculer une nouvelle position
xnew=x+u*dt;
ynew=y+v*dt;
% corriger la nouvelle position si on rencontre une paroi (partie 8.b)
% ...
%faire un pas et enregistrer dans les tableaux X et Y
x=xnew; X(t)=xnew;
y=ynew; Y(t)=ynew;
end
end
Implementer cette fonction sous Matlab et la tester.
25
8.b. Programmer les rebonds elastiques sur les murs
Murs exterieurs de la bote
Le mouvement rectiligne programme (partie facile), il sagit maintenant de trouver une fa con dimplementer
les rebonds elastiques sur les parois. Dans un premier temps, on ne programmera que les rebonds sur les murs
exterieurs : la particule sera alors connee dans la bote (x, y) [0, 1] [0, 1].
1. Trouver les quatre conditions qui permettent de detecter le passage errone dune paroi en fonction des
variables x,xnew,y,ynew.
2. Comment doit-on modier la vitesse et la position `a la rencontre de chacune de ces parois ? Faire un
schema sur un brouillon.
3. Programmer ces conditions et les actions `a entreprendre `a laide de 4 tests.
4. Verier le bon fonctionnement de lalgorithme en achant 3 dierentes trajectoires sur la meme gure,
avec les 4 murs exterieurs.
Murs interieurs de la bote
Les rebonds sur les murs interieurs sont plus diciles `a programmer, car il faut considerer que la particule peut
arriver de gauche ou de droite et quelle peut heurter le mur en haut ou en bas.
1. Trouver les conditions multiples qui permettent de detecter le passage errone dun mur interieur en fonction
des variables x,xnew,y,ynew et D la largeur de lorice.
2. Comment doit-on modier la vitesse et la position `a la rencontre de ces parois ?
3. Programmer ces conditions et les actions `a entreprendre `a laide de 2 nouveaux tests.
4. Verier le fonctionnement de lalgorithme en achant 3 dierentes trajectoires sur la meme gure ensemble
avec les 6 murs.
8.c. Mise `a lequilibre des 2 compartiments
Pour simuler la mise `a lequilibre dun gaz sous pression, nous devons maintenant programmer le cas de beaucoup
(M) de particules. Au l du temps, des particules vont pouvoir sechapper `a travers lorice vers le compartiment
de droite et nous allons temoigner de la mise en equilibre du syst`eme. On introduit le coecient de disymmetrie,
K(t) = (M
g
(t) M
d
(t))/M [1, 1]
o` u M
g
, M
d
sont les nombres de particules se trouvant `a gauche et `a droite. On a K = 0 `a lequilibre. On denit
la temperature (normalisee) des compartiments `a gauche et `a droite comme
T
g
=
1
2
(u
2

g
+v
2

g
) , T
d
=
1
2
(u
2

d
+v
2

d
).
o` u . . .
g
est une moyenne sur toutes les particules se trouvant `a gauche, de meme pour . . .
d
.
1. Faire une fonction multiparttrack capable de calculer les M trajectoires de M particules independantes et
qui utilise la fonction parttrack.
2. Simuler la detente du gaz avec M = 1000 particules et la visualiser `a laide dune animation. Choisir
quelques images caracteristiques pour les mettre dans le rapport.
3. Tracer levolution temporelle de K(t) pour dierentes valeurs de D. Commenter la vitesse de convergence
vers lequilibre.
4. Calculer levolution de la temperature dans chacun des deux compartiments pendant la detente. Expliquer
pourquoi la temperature descend dans le compartiment de gauche. Relier cette observation `a la detente
dun gaz.
26
TP 9. Agregation limitee par diusion
Lobjectif de ce TP est de realiser une simulation numerique du phenom`ene de croissance dendritique en
electrodeposition. Par agregations successives dions `a la surface dune electrode, une structure en forme darbre
peut spontanement etre creee. (cf. gure 9).
M1 M2
Agrgat 1 Agrgat 2
x
y
50 100 150 200
20
40
60
80
100
120
140
160
180
200
Agrgat +1000
boucle
9.a. Algorithme DLA
La methode de simulation utilisee est celle de lagregation limitee par diusion (DLA). Comme le montre la
gure ci-dessus, il sagit de simuler des marcheurs aleatoires qui se deplacent un par un (M1 puis M2 puis ...)
sur un reseau 2D jusqu`a ce quils touchent lagregat auquel ils se collent successivement (agregat 1 puis 2
puis ...). En iterant la meme procedure, on obtiendra une forme comme montree `a droite.
Pour simplier la donne, lagregat initial sera ici tout en bas. Si un marcheur quitte la bote par une fronti`ere
verticale, on le fait rentrer de lautre cote (conditions periodiques). On ne permet pas aux marcheurs de quitter
la bote par le haut.
Programme pour 1 marcheur
On commence par programmer et tester le sort dun marcheur. Lalgorithme se presentera sous la forme suivante :
function DLA 1march(N)
% initialisation de lagregat
...
% initialisation de la position actuelle x,y du marcheur
...
% Boucle : faire une marche jusqua ce quon touche lagregat
%definir les nouvelles positions xnew,ynew
...
%corriger les nouvelles positions xnew,ynew si necessaire
...
%si la nouvelle position sur larbre, ajouter lactuelle position `a lagregat
%et arreter la boucle. Sinon, faire un pas
...
%animation
end
27
Figure 9 Exemple dun agregat de Cuivre obtenue par electrodeposition (Kevin Johnson).
Probl`emes `a resoudre
1. Comment peut-on `a laide dune matrice representer lagregat, sachant quil ny a que deux possibilites :
occupe ou libre ? Comment devra-t-on initialiser cette matrice ?
2. Nous allons suivre la position du marcheur avec des coordonnees x,y enti`eres. Initialiser ces positions pour
que le marcheur ait une position initiale aleatoire tout en haut de la cellule.
3. Sur le reseau, le marcheur aleatoire ne pourra bouger que dans 4 directions (N-E-S-O). Proposer une
methode pour denir la direction dun pas aleatoire (doc irand) qui permettra de xer les nouvelles
positions xnew,ynew.
4. Corriger des fausses nouvelles positions : ajouter les trois corrections `a prevoir pour des particules qui
quitteraient la bote par la gauche, la droite et par le haut
5. Comment peut-on detecter larrivee sur lagregat ? Programmer laction adequate `a entreprendre en fonc-
tion du resultat. Quel type de boucle est le plus adapte.
6. Proposer lanimation qui permettra de tester lalgorithme en direct
9.b. Programme pour M marcheurs
Une fois le programme pour un marcheur teste, il sut dune toute petite modication de la fonction pour
permettre de simuler la croissance de larbre par larrivee de beaucoup (M) de marcheurs. Faire ces modications
dans une nouvelle fonction DLA Mmarch pour eviter dendommager votre programme qui marche.
Attention : le programme sera tr`es lent si vous gardez lanimation qui montre les marcheurs. Plutot que danimer
les marcheurs, on animera la croissance de lagregat, en lachant une fois tous les 20 marcheurs arrives sur
lagregat (doc mod).
Obtenir quelques agregats pour des tailles de reseau dierentes.
9.c. Questions physiques
1. Est-ce que vous pouvez expliquer pourquoi la forme dun arbre est preferee par rapport `a un front plan
dans la simulation ?
2. Pourquoi parle-t-on de lagregation limitee par diusion ? O` u se trouve la diusion dans notre simulation ?
3. Lalgorithme DLA simule tr`es bien le phenom`ene de lelectrodeposition. Proposer quelques autres syst`emes
naturels pour lesquels vous pensez cet algorithme adequate. Trouver quelques images sur linternet pour
illustrer vos propos.
28

Вам также может понравиться