Département de Physique
Enseignant : K. Cheikhrouhou
FSB - STIC2
Lab 1 : Initiation à Matlab
Durée : Trois Heures Enseignant : K. Cheikhrouhou
1.1 Objectif
Le but de ce laboratoire est de vous familiariser avec le logiciel Matlab. Matlab est un
environnement de calcul permettant des calculs numériques et des représentations
graphiques. Vous trouverez dans la première partie de ce lab un bref descriptif de
Matlab. Dans la deuxième partie, nous nous intéresserons à l’utilisation des fichiers
script et des fonctions. Enfin, la représentation graphique en Matlab sera traitée
dans la dernière partie.
>>A=[1 2 3; 4 5 6; 7 8 9]
>>A=[ 1 2 3
4 5 6
7 8 9]
FSB - STIC2
2
Les éléments des matrices peuvent être accédés en mettant leur indice à l’intérieur
de deux parenthèses () :
>>x(1)
ans= -1.3000
On peut aussi construire des matrices en utilisant des matrices plus petites :
>>x(5)=abs(x(1))
x= -1.3 1.7321 4.8000 0 1.3000
>>r=[10 11 12];
>>A=[A;r]
A= 1 2 3
4 5 6
7 8 9
10 11 12
>>z = 2+3i
>>z^2
Certaines commandes ont été spécialement conçues pour manipuler des nombres
complexes : real(z) retourne la partie réelle, imag(z) retourne la partie imaginaire,
abs(z) calcule le module, angle(z) calcule la phase, conj(z) génère le conjugué.
Les opérateurs sont :
– + addition,
– - soustraction,
– * multiplication,
– / division à droite,
– \ division à gauche,
– ’ transposée.
FSB - STIC2
Lab 1 : Initiation à Matlab 3
>>x=1:0.8:5
Le symbole : permet aussi de sélectionner des indices dans les matrices. Sachant que
A est une matrice 3 × 3 :
– A(1:2,3) sélectionnera le troisième élément des lignes 1 et 2,
– A(:,3) sélectionnera la troisième colonne,
– A(:,:) sélectionnera la matrice entière.
Exercice 1
Exercice 2
1 2 3
1. Générer la matrice A = 4 4 6
7 8 9
2. Calculer la transposée de A.
3. Calculer le déterminant de A.
4. Changer l’élément de la 2-ième ligne et la 3-ième colonne à 1.
5. Afficher les deux premières lignes de A.
6. Afficher la première colonne de A.
7. Déterminer la différence entre A*A et A.*A.
Exercice 3
PN 2
Pour un incrément de 0.1, calculer la moyenne mi définie par mi = 1/N n=1 |fi (n)|
pour les fonctions fi (x) suivantes :
1. x ∈ [0, 1], f1 (x) = cos(tan(πx)),
sin(x)
2. x ∈ [1, 10], f2 (x) = x
FSB - STIC2
4
2
3. x ∈]0, 2], f3 (x) = e−x sin(x)
Pour cet exercice, vous pouvez utiliser les fonctions sum et length de Matlab.
Exercice 4
a = [3 + 4i 5 + 9i − 3 − 4i − 5 − 9i 3 − 4i 5 − 9i − 3 + 4i − 5 + 9i]
% test.m
x=[1 2 3];
y=[4 5 6];
Px= x*y’;
Ps = x’*y;
Pe = x.*y;
>> test
FSB - STIC2
Lab 1: Initiation à Matlab 5
Veuillez écrire les fichiers de commandes pour les exercices précédents (de 1 à 4). À la
fin de la séance vous rendrez un compte rendu ainsi que les listings de ces fichiers de
commandes (qui devront être enregistrés sous votre répertoire). L’entête du fichier
de commandes, nommé par exemple lab1groupe1.m sera comme suit :
function a = MAfonction(x,y)
a = x + y;
b = x * y;
>> a = MAfonction(4,2)
a = 6
FSB - STIC2
6
pour obtenir :
Exercice 1
Écrire une fonction qui permet de calculer le module d’un vecteur complexe, son
angle et la moyenne des modules au carré de chaque élément du vecteur.
Exercice 2
Écrire une fonction qui permet de déterminer la taille d’une matrice (on utilisera la
commande size), son déterminant et sa matrice conjuguée.
Exercice 3
FSB - STIC2
Lab 1: Initiation à Matlab 7
>> a = sin(2*pi);
>> b = cos(2*pi);
>> bool = (a>b)
bool = 0
>> a
a =
-2.4493e-016 % ici a devrait égaler 0, la précision est limitée!
>> b
b = 1
Il faut noter ici que l’emploie de l’opérateur ’==’ est très risqué lorsque l’on compare
des valeurs numériques. En effet, la précision de l’ordinateur étant limitée, il est
préférable d’utiliser une condition sur la différence comme dans le code suivant :
Il est aussi possible de lier entre elles des conditions par l’opérateur ’et’ (&) et ’ou’
(|).
Opérateur Description
~a NOT - retourne 1 si a égal 0, 1 si a égal 0
a == b retourne 1 si a égal b, 0 sinon
a < b retourne 1 si a est plus petit que b, 0 sinon
a > b retourne 1 si a est plus grand que b, 0 sinon
a <= b retourne 1 si a est plus petit ou égal à b, 0 sinon
a >= b retourne 1 si a est plus grand ou égal à b, 0 sinon
a ~=b retourne 1 si a est différent de b, 0 sinon
Table 1.1 – Opérateurs de comparaison
FSB - STIC2
8
if CONDITION1
ACTION1;
elseif CONDITION2
ACTION2;
else
ACTION3;
end
Par exemple, on reçoit un entier a, s’il est impair négatif, on le rend positif. S’il
est impair positif, on lui ajoute 1. S’il est pair, on ajoute 2 à sa valeur absolue. La
courte fonction suivante permet de réaliser cette transformation (notez ici, l’emploi
du modulo pour déterminer si l’entier est divisible par 2).
function b = transfEntier(a)
if a < 0 & mod(a,2) ~= 0 % mod permet de trouver
b = -a; % le reste d’une division
elseif a >= 0 & mod(a,2) ~= 0
b = a + 1;
else b = abs(a)+2;
end
for i = 0:valeur_finale
ACTION1; ACTION2; ... ACTIONN;
end
FSB - STIC2
Lab 1 : Initiation à Matlab 9
Remarquez que l’incrément peut être différent de 1, par exemple si l’on veut calculer
la somme des carrés des nombres pairs entre 0 et 10 :
% Prog.1
carre=0;
for i=0:2:10
carre = carre+i^2;
end
while CONDITION
ACTION1; ACTION2; ... ACTIONN;
end
Ce type de boucle est très souvent utilisé pour converger vers une valeur désirée.
Par exemple, on veut trouver le nombre d’entiers positifs nécessaires pour avoir une
somme plus grande que 100. On pourrait réaliser cette tâche de la manière suivante :
% Prog.2
n = 0; % initialisation des valeurs
somme = 0;
while somme <= 100
n=n+1; % itération de n
somme = somme + n; % nouvelle somme
end
Exercice 1
FSB - STIC2
10
Exercice 2
Exercice 3
Écrire un script Matlab qui permet d’approximer tan−1 (x) avec une erreur inférieure
à 10−6 . Ce script doit permettre de déterminer le nombre d’itérations M à l’aide
d’une boucle while. Le programme doit afficher un message d’erreur si la condition
sur x n’est pas remplie.
Exercice 4
Pour des entrée V : vecteur d’ordre N et k un entier inférieur à N, écrire une fonction
qui permet d’effectuer un décalage circulaire d’ordre k du vecteur V .
Exercice 5
1. Calculer
les 30 premiers termes de la suite de Fibonacci définie par :
t1 = 1 , t2 = 1
tk = tk−1 + tk−2 , k = 3, 4, . . .
FSB - STIC2
Lab 1: Initiation à Matlab 11
2. Afficher k, tk , tk /tk−1 pour k = 1, 2, . . . , 30. Faire une version sans et puis avec
l’aide de tableaux.
3. Au lieu d’arrêter les calculs à l’itération 30, introduire un mécanisme d’arrêt
−9
automatique des calculs √ si la valeur du rapport tk /tk−1 est à moins de 10
près du nombre (1 + 5)/2 (pour arrêter un programme il suffit d’utiliser
l’instruction return).
4. Réécrire le script en supprimant la boucle for et le test if et en utilisant une
instruction while.
Exercice 6
Calculer la somme S = N
P 1
i=1 i en utilisant d’abord une boucle for puis en le faisant
au moyen d’un calcul vectoriel et de la commande sum. Comparer les temps d’exécu-
tion pour N = 200000 (l’affichage du temps d’exécution peut se faire au moyen des
commandes tic et toc à placer en début et en fin de programme, respectivement).
Conclusion ?
Exercice 7
Sans utiliser la fonction Matlab sum, écrire une fonction qui permet de calculer la
moyenne quadratique d’un vecteur s’il est réel. Si le vecteur est complexe la fonction
doit calculer la moyenne quadratique de sa partie réelle.
>> X = [0:0.01:2*pi];
>> Y = cos(X);
>> plot(X,Y)
>> X = [0:0.01:2*pi];
>> Y = cos(X);
>> Z = sin(X);
>> plot(X,Y,X,Z)
Ces graphiques manquent cependant de clarté. Il faut toujours nommer les axes,
mettre les unités si possible, proposer une légende, etc. Le SCRIPT suivant est un
exemple simple qui permet de le réaliser :
FSB - STIC2
12
clear all
close all % ferme les anciennes figures
x = [0:0.01:2*pi];
y1 = cos(x);
y2 = sin(x);
figure(1) % Numérotation de la figure
plot(x, y1,’.’,x, y2,’+’) % cos(x) en points, sin(x) en +: superposées
title(’sinus et cosinus’)
xlabel(’x’)
ylabel(’f(x)’)
legend(’cos(x)’,’sin(x)’)
Exercice 1
Reprendre le même exemple en traçant les fonctions cos et sin “continue” dans deux
figures différentes avec des couleurs différentes.
FSB - STIC2
Lab 1 : Initiation à Matlab 13
Exercice 2
Exercice 3
Tracer un demi-cercle centré sur (0,0) et de rayon 10 en rouge. Comment faire pour
tracer le cercle complet.
Exercice 4
Pour une durée de 10 sec, tracer x(t) en fonction de t, z(t) en fonction de t et z(t)
en fonction de x(t). Les fonctions x(t) et z(t) sont définies par :
x(t) = v0 cos(θ0 t)
z(t) = −gt2 /2 + v0 sin(θ0 t)
avec v0 = 800 Km/h, g = 9.79 m/s2 et θ0 = 10 degrés.
FSB - STIC2
Lab 2 : Résolution des Systèmes
Linéaires
Durée : Trois Heures Enseignant : K. Cheikhrouhou
2.1 Objectif
L’objectif de ce TP est de résoudre numériquement un système linéaire en utilisant
la factorisation LU d’une matrice inversible. On étudiera dans la deuxième partie
une des méthodes itératives qui est la méthode de Jacobi.
FSB - STIC2
Lab 2 : Résolution des Systèmes Linéaires 15
5
En supposant que B = 10 ,
−10
On suppose que la matrice A est une matrice triangulaire supérieure. Par exemple :
1 −1 2
A = 0 2 1 En supposant que B est le même que celui précédemment
0 0 −2
utilisé,
%% Algo.1
xn = bn /an,n
pour i = n − 1 jusqu’à 1
S = bi
pour j = i + 1 jusqu’à n
S = S − ai,j xj
fin
xi = S/ai,i
fin
FSB - STIC2
16
2.3 Factorisation LU
En général la matrice A n’est ni diagonale ni triangulaire. Ce qui complique énor-
mément la résolution de ce genre de système linéaire. Dans cette partie du lab, nous
allons supposer tout d’abord que la matrice A est inversible et qu’elle admet une
factorisation du type LU, i.e., A = LU où L est une matrice diagonale inférieure
et U est une matrice diagonale supérieure. Cette technique trouve tout son intérêt
grâce à la grande facilité de résoudre numériquement les systèmes triangulaires.
L’algorithme de la factorisation LU est le suivant :
FSB - STIC2
Lab 2: Résolution des Systèmes Linéaires 17
fin
fin
fin
fin
Dx + (L + U) x = b.
De plus, :
x = D −1 [b − (L + U ) x] ,
Si ai,i 6= 0 pour tout i. On aura alors l’expression itérative suivante : :
x(k+1) = D −1 b − (L + U ) x(k) .
FSB - STIC2
18
σ=0
pour j = 1 jusqu’à n
si j 6= i alors
(k−1)
σ = σ + ai,j xj
fin
fin
(k)
xi = ( bi a−i,i σ )
fin
Vérifier si la convergence est obtenue
fin
3
1 2 2
3. Tester ensuite le programme avec le système : A = 1 3 −2 et B =
3 5 8
2
−1
8
4. Vérifier si les résultats obtenues sont corrects. Conclure.
FSB - STIC2
Lab 3 : Résolution des Systèmes
non Linéaires
Durée : Trois Heures Enseignant : K. Cheikhrouhou
3.1 Objectif
L’objectif du TP est de résoudre un système non linéaire de la forme f (x) = 0.
Pour résoudre numériquement ce problème, on utilisera la méthode du point fixe, la
méthode de Newton et enfin la méthode de Newton améliorée.
3.2.1 Présentation
Il y a plusieurs façons de réécrire une équation f (x) = 0 sous la forme g(x) = x
sans que cela change les racines. Si on peut faire ça, on dira que la racine α de
f (x) = 0 est un point fixe de g. Pour chercher les point fixes de g on peut, sous
certaines conditions, utiliser l’algorithme suivant : xn+1 = g(xn ) pour n = 0, 1, 2, . . ..
Les propriétés de convergence de cet algorithme sont locales : si on part assez près
de la racine, la méthode diverge si |g ′(α)| > 1 où g ′ (x) désigne la dérivée première
de g(x).
1. Représenter sur la même figure (avec des couleurs différentes) chacune des
fonctions gi (x) dans l’intervalle x ∈ [0, 2] (utiliser la commande matlab hold
on pour que toutes les courbes soient sur la même figure).
2. Identifier graphiquement les points fixes α̂i = gi (α̂i ) de chacune de ces fonctions
en représentant sur le même graphe tracé à la question 1) la fonction y = x.
On rappelle qu’avec cette manière de faire les α̂i ne sont que des estimations
grossières des points fixes αi .
FSB - STIC2
20
3. Calculer la dérivée première de chacune des fonctions. En utilisant les α̂i pré-
cédemment évalués, déterminer s’il y a convergence de la méthode du point
fixe.
4. Écrire en Matlab le programme qui permet de calculer le point fixe. Vérifier ce
programme en utilisant les deux fonctions logistiques gi (x). Les valeurs appro-
chées de chaque point fixe αi seront déterminées avec une tolérance de 10−9
(prendre soin d’arrêter la recherche si le nombre d’itérations dépasse 1000).
Choisir comme point de départ x0 pour chaque zéro une estimation conve-
nable obtenue grâce aux graphes, i.e., x0 = α̂i . Vérifier que ça fonctionne aussi
pour x0 = 0.1.
où f ′ (x) désigne la dérivée de la fonction f (x). Si le zéro inconnu α est isolé, alors
il existe un voisinage de α tel que pour toutes les valeurs de départ x0 dans ce
voisinage, la suite (xn ) va converger vers α. De plus, α est considéré comme le point
fixe de la fonction g(x) = f (x) + x.
FSB - STIC2
Lab 3 : Résolution des Systèmes non Linéaires 21
FSB - STIC2
Lab 4 : Interpolation Polynomiale
Durée : Trois Heures Enseignant : K. Cheikhrouhou
4.1 Objectif
L’objectif du TP est d’approximer numériquement une fonction dont on connaı̂t les
valeurs en un nombre fini de points par interpolation polynomiale.
FSB - STIC2
Lab 4 : Interpolation Polynomiale 23
%% Algo. de Lagrange
k=0
pour x = a jusqu’à b avec un pas px
k =k+1
pour i = 1 jusqu’à N
L=1
pour j = 1 jusqu’à N
si i 6= j alors
L = L ∗ (x − X(j))/(X(i) − X(j))
fin
fin
P (k) = P (k) + Y (i) ∗ L
fin
fin
FSB - STIC2
24
2. On suppose que trois points de la fonction f (x) sont connus : f (−0.8) = 0.2183,
f (0.3) = 1.2229 et f (0.6) = 1.5057. Écrire un script en Matlab permettant de
calculer le polynôme d’interpolation de Lagrange P2 (x) pour x ∈ [−1, 1] avec
un pas de 0.1.
3. On suppose maintenant que les points connus de la fonction f (x) sont f (−0.8) =
0.2183, f (−0.5) = 1.7788, f (−0.1) = 0.1810, f (0.3) = 1.2229, f (0.6) = 1.5057
et f (0.9) = −0.3642. Écrire un script en Matlab permettant de calculer le
polynôme d’interpolation de Lagrange P3 (x) pour x ∈ [−1, 1] avec un pas de
0.1.
4. Tracer sur la même figure la fonction f (x), les polynômes P1 (x), P2 (x) et P3 (x)
pour x ∈ [−1, 1] avec un pas de 0.1.
5. En utilisant les fonctions max et abs de Matlab, calculer l’erreur maximale
commise en approximant la fonction f (x), par P1 (x), P2 (x) et P3 (x) respecti-
vement. Conclure.
..
.
f [x1 ,x2 ,...,xn ]−f [x0 ,x1 ,...,xn−1 ]
f [x0 , x1 , . . . , xn ] = xn −x0
di = f [x0 , x1 , . . . , xi ] pour i = 1, . . . , N
où N est le nombre d’éléments dans le vecteur X. L’algorithme qui permet de calculer
ces coefficients est le suivant :
FSB - STIC2
Lab 4 : Interpolation Polynomiale 25
FSB - STIC2
Lab 5 : Intégration Numérique et
Équations Différentielles
Durée : Trois Heures Enseignant : K. Cheikhrouhou
5.1 Objectif
Le but de ce laboratoire est, tout d’abord, de vous initier au calcul numérique ap-
proché d’une intégrale effectué sur Matlab. Deux techniques seront étudiées : mé-
thode des rectangles et des trapèzes. La deuxième partie de ce lab est consacrée au
calcul numérique des solutions des équations différentielles. Deux méthodes seront
étudiées : méthode d’Euler et de Runge-Kutta.
5.2 Présentation
Pour effectuer un calcul numérique approché d’une intégrale In , on considère ici le
cas d’une fonction f définie sur [a, b] . On définit le pas d’approximation h de la
manière suivante : h = b−a n
; où n détermine la précision de l’approximation. On
définit aussi xi = a + ih pour i = 0, 1, . . . , n − 1.
n−1
X
In = h f (xi )
i=0
À noter que cette technique est dite méthode des rectangles à gauche. En effet, les
xi sont pris comme la première borne des intervalles élémentaires d’intégration :
xi = a, a + h, a + 2h, . . .. Il en existe d’autres : les méthodes des rectangles à droite
ou au point milieu.
FSB - STIC2
Lab 5 : Intégration Numérique et Équations Différentielles 27
FSB - STIC2
28
où xi = a + ih. R1
4
Dans ce qui suit on considère que f est définie par f (x) = 1+x2
et I = 0
f (x)dx.
1. Écrire une procédure Matlab qui réalise le calcul numérique approché de l’in-
tégrale par la méthode des rectangles au point milieu pour la fonction f pour
n variant entre 10 et 100, avec un pas de 5.
2. Écrire une procédure Matlab qui réalise le calcul numérique approché d’une
intégrale par la méthode de Simpson pour toute fonction f pour n variant
entre 10 et 100, avec un pas de 5.
3. Tracer sur la même figure les quatre courbes d’erreurs en fonction de n. Dé-
terminer les vitesses de convergences des deux dernières méthodes. Conclure.
FSB - STIC2
Lab 5 : Intégration Numérique et Équations Différentielles 29
5.7 Présentation
On veut résoudre une équation différentielle de la forme :
.
y = f (t, y) avec t ∈ [t0 , T ]
y(t0) = y0
yn+1 = yn + hφ(tn , yn )
yn+1 = yn + hf (tn , yn )
k1 = hf (tn , yn )
h k1
k2 = hf (tn + , yn + )
2 2
h k2
k3 = hf (tn + , yn + )
2 2
k4 = hf (tn + h, yn + k3 )
FSB - STIC2
30
1
1. Vérifier que y = 2
log(2t + 1) est la solution théorique exacte de l’équation
différentielle.
2. En prenant h = 0.01, résoudre l’équation par les deux méthodes citées précé-
demment. Les solutions seront notées y1 (n) pour la méthode d’Euler et y2 (n)
pour la méthode RK4.
3. Représenter sur la même figure |y1(n) − y(n)| et |y2 (n) − y(n)|. Conclure.
FSB - STIC2