0% ont trouvé ce document utile (0 vote)
131 vues26 pages

TP Cs

Ce document contient des exercices de calcul matriciel et numérique avec le logiciel MATLAB/Octave. Il présente plusieurs manipulations portant sur la création et manipulation de matrices, de vecteurs, de signaux et de suites numériques. Le document fournit également des éléments théoriques sur les notions abordées.

Transféré par

Jassem Nasar
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
131 vues26 pages

TP Cs

Ce document contient des exercices de calcul matriciel et numérique avec le logiciel MATLAB/Octave. Il présente plusieurs manipulations portant sur la création et manipulation de matrices, de vecteurs, de signaux et de suites numériques. Le document fournit également des éléments théoriques sur les notions abordées.

Transféré par

Jassem Nasar
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

PARCOURS : LGE-TC

SEMESTRE : 2
AU : 2021-2022
Réf. : GE-085

Abdelbacet Mhamdi
Docteur-Ingénieur en Génie Électrique

Maître Technologue en GE à l’ISET de Bizerte

[email protected]

CALCUL SCIENTIFIQUE : MATLAB/OCTAVE


ATELIERS CORRIGÉS

Institut Supérieur des Études Technologiques de Bizerte

Disponible à l’adresse : https ://github.com/a-mhamdi/isetbz/


CODE D’HONNEUR
THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL
Department of Physics and Astronomy
http://physics.unc.edu/undergraduate-program/labs/general-info/

“During this course, you will be working with one or more partners with whom you
may discuss any points concerning laboratory work. However, you must write your
lab report, in your own words.
Lab reports that contain identical language are not acceptable, so do not copy your
lab partner’s writing.
If there is a problem with your data, include an explanation in your report. Recog-
nition of a mistake and a well-reasoned explanation is more important than having
high-quality data, and will be rewarded accordingly by your instructor. A lab report
containing data that is inconsistent with the original data sheet will be considered
a violation of the Honor Code.
Falsification of data or plagiarism of a report will result in prosecution of the offen-
der(s) under the University Honor Code.
On your first lab report you must write out the entire honor pledge :

The work presented in this report is my own, and the data was obtained by my
lab partner and me during the lab period.

On future reports, you may simply write “Laboratory Honor Pledge” and sign your
name.”
Table des matières

1 Calcul matriciel 1

2 Système d’équations linéaires 10

3 Intégration numérique 16

4 Interpolation polynomiale 19

i
Atelier Progiciel : Matlab/Octave

Atelier # 1 | Calcul matriciel


Manipulation № 1 : 

Le signal échelon est défini par x(t) = 1 si t > 0 et x(t) = 0 sinon. Écrivez les instructions MATLAB
permettant de créer et d’afficher ce signal sur l’intervalle de temps [–5, 5] avec un pas de 0.01 sec.

Command Window
1 >> t = -5:0.01:5
2 >> x(t>0) = 1
3 >> plot(t, x)
§ 4 >> grid
5 >> xlabel('Temps (sec)')
6 >> ylabel('x(t)')
7 >> title('Signal échelon')


Manipulation № 2 : 

Écrire les commandes MATLAB correspondantes.
a) Créer une matrice Z sachant que :
• la 1
ère ligne de Z est→
−a = [10, –20, 30, –40];

• la 2
ème ligne de Z est le double de →
−a ;

• la 3ème ligne de Z est le carré de chaque élément de→


−a .

b) Trouver la taille de Z ;
c) Calculer le nombre des éléments positifs, négatifs et nuls de la matrice Z ;
d) Calculer le nombre des éléments pairs et impairs de la matrice Z ;
e) Trouver le max, min de Z.

Command Window
1 >> a = [10 -20 30 -40]
2 >> Z = [a; 2*a; a.^2]
3 >>
4 >> size(Z)
5 >>
§ 6 >> length(Z(Z<0)) % Eléments négatifs
7 >> length(Z(Z>0)) % Eléments positifs
8 >> length(Z(Z == 0)) % Eléments nuls
9 >>
10 >> length(Z(mod(Z, 2) == 0)) % Eléments pairs

1
Atelier # 1. Calcul matriciel 2

11 >> length(Z(mod(Z, 2) == 1)) % Eléments impairs


12 >>
§ 13 >> max(max(Z))
14 >> min(min(Z))


Manipulation № 3 : 

Soient les deux fonctions
x2
f(x) = xe–x cos(2x) et g(x) = e– 2

pour x ∈ [0, π] avec un pas p = .
100
a) Calculer f(x) et g(x);
b) Représenter leurs courbes sur la même figure.

Command Window
1 >> x = 0:2*pi/100:pi
2 >> f = x.*exp(-x).*cos(2*x)
3 >> g = exp(-x.^2/2)
§
4 >>
5 >> plot(x, f, x, g)
6 >> legend('f(t)', 'g(t)')


Manipulation № 4 : 

Soit la matrice

7 5 8 8 3
© ª
­ 7 1 8 4 7 ®
A = ­ ®.
­ 1 2 1 6 6 ®
« 7 4 8 1 8 ¬

a) Extraire dans un vecteur→


−e tous les éléments de A qui sont supérieurs à 6;


b) Extraire dans un vecteur f toutes les valeurs de A qui sont inférieures à 6 en leur rajoutant 1.

Command Window
1 >> A = [7 5 8 8 3; 7 1 8 4 7; 1 2 1 6 6; 7 4 8 1 8]
§ 2 >> e = A(A>6)
3 >> f = A(A>6) + 1


Manipulation № 5 : 


a) Écrire les commandes qui demandent à l’utilisateur deux entiers n ≥ 2 et m ≥ 2, et génère une matrice
M de nombres pseudo-aléatoires uniformes entre 0 et 1 de taille n × m;
b) Construire une sous matrice avec uniquement les éléments de M à un indice de ligne et de colonne
pair;
c) Construire une matrice A telle que pour tout indice i ∈ {1 · · · 3} et j ∈ {1 · · · 3}, le terme

aij = 2i – j;

A. Mhamdi
Atelier # 1. Calcul matriciel 3

d) Construire une matrice B telle que pour tout indice i ∈ {1 · · · 3} et j ∈ {1 · · · 4}, le terme
j
bij = 2i – .
3

Command Window
1 >> n = input('Donner un entier >= 2 :\n')
2 >> m = input('Donner un entier >= 2 :\n')
3 >> M = rand(n, m)
4 >>
5 >> idx_Row = 2:2:n-mod(n, 2) % Les indices pairs de lignes
6 >> idx_Col = 2:2:m-mod(m, 2) % Les indices pairs de colonnes
7 >>
8 >> M(idx_Row, idx_Col)
§
9 >>
10 >> I = 1:3
11 >> J = 1:3
12 >> A = 2*[I' I' I']-[J; J; J] % Octave : A = 2*I'-J
13 >> I = 1:3
14 >> J = 1:4
15 >>
16 >> B = 2*[I' I' I' I']-1/3*[J; J; J; J] % Octave : B = 2*I'-1/3*J


Manipulation № 6 : 

Soit la matrice et les vecteurs colonnes suivants :
1/8 1/4 1/5 1 5
© –1 ª →
− © ª →
−u © ª
A = ­ /4 0 5/8 ® , b = ­ –1 ® , 1 = ­ 2 ®. (1.1)
« 1/5 –5/8 1/8 ¬ « 1 ¬ « 4 ¬

→−
On définit pour n ≥ 1, la suite→
−u →

n+1 = A u n + b .
 
a) Construire une boucle qui calcule les 100 premiers termes de la suite →−u ;
n

b) Représenter graphiquement l’évolution du module ∥→ −u ∥ en fonction de l’indice n;


n 2
ux q
©
­On rappelle que ∥→−u ∥ = u = u2 + u2 + u2 .ª
2 y x y z ®
uz
« 2 ¬
2  
−u par ©­ 1 ª et re–calculer et re–afficher l’évolution de la suite →
c) Changer le vecteur→ −u .
1 ® n
« 0 ¬

Command Window
1 >> A = [1/8 1/4 1/5; -1/4 0 5/8; 1/5 -5/8 1/8]
2 >> b = [1 -1 1]'
3 >> U(:, 1) = [5 2 4]'
§ 4 >>
5 >> for k = 2:100
6 U(:, k) = A*U(:, k-1) + b

A. Mhamdi
Atelier # 1. Calcul matriciel 4

7 end
8 >>
9 >> Module = sqrt(sum(U.^2, 1))
10 >> plot(Module)
11 >>
12 >> U(:, 1) = [2 1 0]'
§ 13 >> for k = 2:100
14 U(:, k) = A*U(:, k-1) + b
15 end
16 >>
17 >> Module = sqrt(sum(U.^2, 1))
18 >> hold on
19 >> plot(Module)


Manipulation № 7 : 


a) Construire de trois manières différentes, le vecteur ligne X de taille 100 qui comporte les 100 premiers
carrés des nombres entiers;
b) Construire sans effectuer de boucles la matrice M de dimension 10×10 donnant les résultats de la
table de multiplication;
c) Extraire la matrice formée de la table de multiplication des 4 premiers entiers impairs (en ligne) par
les 4 premiers entiers pairs (en colonnes).


Manipulation № 8 : 

Écrire les instructions MATLAB permettant d’exécuter les commandes suivantes :
a) Trouver la valeur de t ∈ [0, 2π] qui maximise cos (t) + sin (t). On considère un pas de t de 0.01;
b) Créer un vecteur ligne composé de 100 nombres tirés aléatoirement suivant la loi uniforme sur l’inter-
valle [0, 5];
c) Trouver ensuite l’indice et la valeur au sein de ce vecteur qui s’approche le plus de π.
(Utiliser la commande find.)

Command Window
1 >> t = 0:0.01:2*pi
2 >> y = cos(t)+sin(t)
3 >> t(y == max(y))
4 >>
§ 5 >> u = 5*rand(1, 100)
6 >>
7 >> y = abs(u-pi)
8 >> idx = find(y == min(y))
9 >> disp(u(idx))


Manipulation № 9 : 


a) Créer la variable t contenant tous les instants d’échantillonnage entre 0 et 0.1 sec, par pas de 1 msec
(soit 10–3 sec);

A. Mhamdi
Atelier # 1. Calcul matriciel 5

b) Afficher en fonction du temps t le vecteur→



ω 1 contenant les valeurs de la fonction

x(t) = 2 cos (2πft + φ1 )

pour une fréquence f = 50 Hz, une phase φ1 = π/3 ;


c) Afficher la courbe en bleu avec une épaisseur de ligne de 2 et faire apparaître les échantillons par des
étoiles. Renseigner les axes et mettre un titre;
d) Sur le même graphique, afficher en fonction du temps et en rouge le vecteur→ −
ω contenant les valeurs
2
de la fonction
y(t) = 2 cos (2πf1 t + φ1 ) sin (2πf2 t + φ2 )
pour les fréquences f1 = 50 Hz, f2 = 300 Hz, les phases φ1 = π/3 et φ2 = π/4 ;
e) Mettre une épaisseur de ligne de 2 et faire apparaître les échantillons par des ronds;
f) Changer le titre et mettre une légende.

Command Window
1 >> t = 0:1e-3:0.1
2 >> o1 = 2*cos(2*pi*50*t+pi/3)
3 >> plot(t, o1, 'b', 'linewidth', 2, 'marker', '*')
4 >> xlabel('Temps( sec)'), ylabel('x')
5 >> title("Evolution de x(t)")
§ 6 >> o2 = 2*cos(2*pi*50*t+pi/3).*sin(2*pi*300*t+pi/4)
7 >> hold on
8 >> plot(t, o2, 'r', 'linewidth', 2, 'marker', 'o')
9 >> ylabel('x et y')
10 >> title("Evolution de x(t) et de y(t)")
11 >> legend('x(t)', 'y(t)')

Les instructions données par la suite ont été testées sous GNU OCTAVE.
Command Window
1 >> X = [0:99].^2
2 >> v = 0:9
§
3 >> M = v'.*v
4 >> M(1:2:7, 2:2:8)


Manipulation № 10 : 

3 4
© ª © ª
­ 2 ® ­ 1 ®
Soient les vecteurs X = ­ ® et Y = ­ ®.
­ 6 ® ­ 3 ®
« 8 ¬ « 5 ¬
a) Ajouter la somme des éléments de X à Y ;
b) Élever chaque élément de X à la puissance spécifiée par l’élément correspondant de Y ;
c) Diviser chaque élément de Y par l’élément correspondant de X. Le résultat trouvé devrait être assigné
à la variable Z ;
d) Multiplier chaque élément de Z par lui même et assigner le résultat à Ω;
e) Calculer X T Y – Ω.

A. Mhamdi
Atelier # 1. Calcul matriciel 6

Command Window
1 >> X = [3 2 6 8]'
2 >> Y = [4 1 3 5]'
3 >> Y += sum(X)
§ 4 >> X.^Y
5 >> Z = Y.^X
6 >> Omega = Z.^2
7 >> X'*Y-Omega


Manipulation № 11 : 

Écrivez les instructions permettant de générer un vecteur ligne contenant tous les entiers pairs entre 456
et 222 rangé du plus grand au plus petit. Combien y en a-t-il de ces entiers pairs?

Command Window
1 >> X = 456:-2:222
§
2 >> length(X)


Manipulation № 12 : 

Soit le vecteur X = [0, π/10, 2π/10, · · · , 2π] :
a) Tracer sur un même graphique les trois courbes

Y11 = sin(X), Y12 = sin(X – 0.3) et Y13 = sin(X – 0.5),

de telle sorte que la courbe 1 soit une ligne continue rouge, la courbe 2 des cercles bleus, et la courbe 3 des
pointillés noirs;
b) Définir
Y21 = sin(X), Y22 = cos(X),
puis utiliser subplot(2,1,1) et subplot(2,1,2) pour tracer sur une même figure les deux graphes
des fonctions sinus et cosinus, l’un en dessous de l’autre.

Command Window
1 >> X = 0:pi/10:2*pi
2 >> Y11 = sin(X)
3 >> Y12 = sin(X-0.3)
4 >> Y13 = sin(X-0.5)
5 >> plot(X, Y11, 'r')
6 >> hold on
7 >> plot(X, Y12, 'ob')
§
8 >> plot(X, Y13, ':k')
9 >> Y21 = sin(X)
10 >> Y22 = cos(X)
11 >> subplot(2, 1, 1)
12 >> plot(X, Y21)
13 >> subplot(2, 1, 2)
14 >> plot(X, Y22)


Manipulation № 13 : 


A. Mhamdi
Atelier # 1. Calcul matriciel 7

 
Pour tout t ∈ 0, 12 et par pas de 0.01, on considère le signal
 π
x(t) = sin 2πf0 t + ,
7
où f0 = 6Hz. Compléter les instructions MATLAB permettant de créer et d’afficher graphiquement la
fonction x.

Command Window
1 >> T = 0:0.01:0.5
2 >> X = sin(12*pi*T+pi/7)
3 >> plot(T, X)
§ 4 >> xlabel('Temps (sec)')
5 >> ylabel('x(t)')
6 >> title('Graphe de x au cours du temps')
7 >> grid on;


Manipulation № 14 : 

On définit n! comme étant le produit des entiers inférieurs à n et strictement positifs. Écrire l’instruction
MATLAB qui permet de calculer ln(123!). On rappelle que :
!
Ön
ln (n!) = ln k
k=1
Õ
n
= ln (k) . (1.2)
k=1

Command Window
§ 1 >> LnFact123 = sum(log(1:123))


Manipulation № 15 : 

Écrire le code MATLAB qui permet de créer les variables suivantes :
a) Z : matrice de dimensions 4 × 5 dont les éléments pris en colonne sont les nombres allant de 0 à –1.9
par pas de –0.1;
b) F : matrice de dimensions 9 × 5 dont la partie haute est la matrice Z précédente et le reste est nul;
c) D : matrice diagonale 6 × 6 dont les éléments diagonaux valent 10–3 ;
d) U : matrice de dimensions 3 × 6 dont les éléments sont des tirages pseudo–aléatoires uniformes sur
l’intervalle [0, 1];
e) Σ1 : somme des colonnes de F ;
f) Σ2 : somme de tous les éléments de U ;
g) →
−v : vecteur ligne de longueur 1000 dont les éléments sont des tirages pseudo–aléatoires gaussiens de
moyenne nulle et d’écart–type 2;
h) µ : moyenne empirique de→ −v ;

i) σ 2 : variance empirique de→


−v .

A. Mhamdi
Atelier # 1. Calcul matriciel 8

Command Window
1 >> Z = reshape(0:-0.1:-1.9, 4, 5)
2 >> F = zeros(9, 5)
3 >> F(1:4, :) = Z
4 >> D = 1e-3*eye(6)
5 >> U = rand(3, 6)
§
6 >> Sigma1 = sum(F, 2)
7 >> Sigma2 = sum(sum(U))
8 >> v = 2*randn(1, 1000)
9 >> mu = mean(v)
10 >> sigma2 = var(v)


Manipulation № 16 : 


a) Définir une matrice M aléatoire selon une loi uniforme à trois lignes et sept colonnes;
b) Combien de nombres dans cette matrice sont plus grand que 0.5? que 0.8? Où sont–ils situés?
c) Construire alors la matrice P obtenue à partir de la matrice M en remplaçant tous les nombres de M
inférieurs à 0.4 par 0, et ceux supérieurs à 0.4 par 1;
d) Construire de même la matrice Q obtenue à partir de la matrice M en remplaçant tous les nombres
de M inférieurs à 0.5 par -3 et tous les nombres supérieurs à 0.5 par 14.

Command Window
1 >> M = rand(3, 7);
2 >> length(M(M>=0.5));
3 >> [r5_idx, c5_idx] = find(M>=0.5);
§ 4 >> length(M(M>=0.8));
5 >> [r8_idx, c8_idx] = find(M>=0.8);
6 >> P = M; P(P<=0.4) = 0; P(P>=0.4) = 1;
7 >> Q = M; Q(Q<=0.5) = -3; Q(Q>=0.5) = 14;


Manipulation № 17 : 


1
© ª
­ 2 ®
a) Construire le vecteur colonne x = ­ ® ;
­ 3 ®
« 4 ¬
b) Calculer P définie par pij = xi xj ;
Õ
4
c) Calculer m = x2i ;
k=1
d) Créer le vecteur ligne→−a en prenant que la 1ère ligne de P ;


e) Créer le vecteur ligne b en prenant que la 2ème colonne de P ;
−a et→
f) Créer la matrice C en accolant verticalement les deux vecteurs lignes→

b.

Command Window
§ 1 >> X = [1; 2; 3; 4]

A. Mhamdi
Atelier # 1. Calcul matriciel 9

2 >> P = X*X'
3 >> m = sum(X.^2)
§ 4 >> a = P(1, :)
5 >> b = P(:, 2)'
6 >> C = [a; b]


Manipulation № 18 : 

π
a) Définir la variable X = , et calculer Y1 = sin (X) et Y2 = cos(X), puis Z = tan(X) à partir de Y1
4
et Y2 ;
hπ π π i
b) Définir la variable X = , , , et calculer Y1 = sin(X) et Y2 = cos(X);
6 4 3
c) Calculer alors Z = tan(X) en utilisant exclusivement les vecteurs Y1 et Y2 précédents;
d) Définir la variable X = [0 : 0.1 : 2π]. Combien y a-t-il de valeurs dans ce vecteur? Afficher la courbe
du sinus.

Command Window
1 >> X = pi/4; Y1 = sin(x); Y2 = cos(X); Z = Y1/Y2;
2 >> X = [pi/6 pi/4 pi/3]; Y1 = sin(X); Y2 = cos(X);
3 >> tanX = Y1./Y2;
§ 4 >> X = 0:.1:2*pi;
5 >> length(X);
6 >> plot(X, sin(X)); grid on; xlabel('X'); ylabel('sin(X)');
7 >> title('La courbe du sinus');

A. Mhamdi
Atelier Progiciel : Matlab/Octave

Atelier # 2 | Système d’équations linéaires


Manipulation № 1 : 

Déterminer toutes les matrices X ∈ M(2, 2) (Ò) telles que A = BX. On donne

4 3 2 3
© ª © ª
A = ­ 6 5 ® et B = ­ 3 4 ®.
« 4 3 ¬ « 2 3 ¬

On ignore la dernière ligne de A et de B.


Command Window
1 >> A = [4 3; 6 5]
2 >> B = [2 3; 3 4]
§ 3 >>
4 >> det(B) % Tester l'inversibilité de B !
5 >> X = B\A


Manipulation № 2 : 

Trouver le point d’intersection de deux lignes droites ∆1 et ∆2 définies dans le système de coordonnées
cartésiennes par :



 ∆1 : 4x + 3y = 24


 ∆2 : 3x + 4y = 25.

Command Window
1 >> A = [4 3; 3 4]
2 >> b = [24; 25]
3 >> det(A)
§
4 >> A\b
5 >> fprintf("Les deux droites s'intersectent\
6 au point (%.1f, %.1f).\n", ans)


Manipulation № 3 : 

24 crayons et 12 gommes à effacer coûtent 9.6 dinars. 20 crayons et 15 gommes à effacer coûtent 10 di-
nars. Quels sont les prix du crayon et de la gomme? Décrire le problème d’abord par un système d’équa-

10
Atelier # 2. Système d’équations linéaires 11

tions.

On dénote par c et g le nombre de crayons et de gommes à effacer respectivement. Le problème se ramène à


l’écriture suivante :



 24c + 12g = 9.6


 20c + 15g =
 10

Command Window
1 >> A = [24 12; 20 15]
2 >> b = [9.6; 10]
§
3 >> det(A)
4 >> A\b


Manipulation № 4 : 

Vous contre un athlète! Vous pouvez courir 0.2 km chaque minute. L’athlète peut courir 0.5 km chaque
minute. Vous débutez la course 6 minutes plus tôt. Jusqu’où pouvez-vous aller avant que l’athlète ne vous
attrape?

La distance en km, parcourue par un athlète est 0.5y. La vôtre exprimée en km, est (1.2 + 0.2x). Le système
d’équations est donné donc par :


 x–y
 = 0
(S)

 0.2x – 0.5y = –1.2.

Command Window
1 >> A = [1 -1; 0.2 -0.5]
2 >> b = [0; -1.2]
§ 3 >> det(A)
4 >> T = A\b
5 >> (T + [6; 0]).*[.2; .5] % Distances parcourues


Manipulation № 5 : 

Soit la matrice A ∈ Òn×n ayant la forme suivante :

b1 c1 0 ··· 0
© .. ª
­ .. .. .. ®
­ a1 . . . . ®
­ ®
A = ­­ 0
.. ..
. .
..
. 0 ®
®
­ .. .. .. .. ®
­ . . . . cn–1 ®
­ ®
« 0 · · · 0 an–1 bn ¬
On note
■ b = (bi )1≤i≤n les coefficients diagonaux;
■ a = (ai )1≤i≤n–1 les coefficients sous–diagonaux;

A. Mhamdi
Atelier # 2. Système d’équations linéaires 12

■ c = (ci )1≤i≤n–1 les coefficients sur-diagonaux de la matrice A.


Afin de résoudre un système A→ −x = →−v , on peut appliquer une factorisation sous la forme LU, avec :

1 0 ··· ··· 0 d1 u1 ··· ··· 0


© . ª © .. ª®
­ .. .. ..
. .. ®® ­ .. .. ..
­ l1 . . ­ 0 . . . . ®
­ . ® ­ .. ®
L = ­­ .
0 .. ..
. ..
. .. ®® et U = ­­ .
..
.
.. ..
. . 0 ®®
­ .. . . . . .. ® ­ .. .. .. .. ®
­ . . . . 0 ®® ­ . . . . un–1 ®®
­ ­
« 0 · · · 0 ln–1 1 ¬ « 0 ··· ··· 0 dn ¬

On donne l’algorithme de cette factorisation.

Entrée :

−a ∈ Òn–1 ,→
→ −
b ∈ Òn et→
−c ∈ Òn–1

Sortie :


− →

l ∈ Òn–1 , d ∈ Òn et→
−u ∈ Òn–1 .

Initialisation :



n ← length( b )
d1 ← b1
Pour i ← 1 à n – 1 faire
li ← dai
i
ui ← ci
di+1 ← bi+1 – li ui
Fin

a) Construire la matrice A, donnée par :

2 –1 0 0 0
© ª
­ –1 2 –1 0 0 ®
­ ®
A = ­ 0 –1 2 –1 0 ® .
­ ®
­ 0 0 –1 2 –1 ®
« 0 0 0 –1 2 ¬
−a ,→
b) Extraire les vecteurs→
− →
b et −c à partir de la matrice A ;

− →− − −a ,→
− →
u à partir de vecteurs→
c) Compléter le code qui permet d’obtenir les vecteurs l , d et→ b et −c ;
d) Former par la suite les deux matrices L et U ;
e) Écrire un code qui permet de résoudre le système triangulaire inférieur L→
−y = →
−v , où


−v = (0, 1, 2, –1, 5)T ;

f) Écrire un code qui permet de résoudre le système triangulaire supérieur U→


−x = →
−y .

A. Mhamdi
Atelier # 2. Système d’équations linéaires 13

Command Window
1 >> A = [2 -1 0 0 0; -1 2 -1 0 0; 0 -1 2 -1 0; 0 0 -1 2 -1; 0 0 0 -1 2]
2 >>
3 >> n = length(A)
4 >> for i = 1:n
5 b(i) = A(i, i)
6 end
7 >> for i = 1:n-1
8 a(i) = A(i+1, i)
9 c(i) = A(i, i+1)
10 end
11 >>
12 >> d(1) = b(1)
13 >> for i = 1:n-1
14 l(i) = a(i)/d(i)
15 u(i) = c(i)
16 d(i+1) = b(i+1)-l(i)*u(i)
17 end
18 >> L = zeros(n, n), U = zeros(n, n)
§ 19 >> for i = 1:n
20 L(i, i) = 1
21 U(i, i) = d(i)
22 end
23 >> for i = 1:n-1
24 L(i+1, i) = l(i)
25 U(i, i+1) = u(i)
26 end
27 >>
28 >> v = [0 1 2 -1 5]'
29 >> y = zeros(n, 1)
30 >> for i = 1:n
31 y(i) = 1/L(i, i)*(v(i)-L(i, :)*y)
32 end
33 >>
34 >> x = zeros(n, 1)
35 >> for i = n:-1:1
36 x(i) = 1/U(i, i)*(y(i)-U(i, :)*x)
37 end


Manipulation № 6 : 

Mettre le problème suivant sous forme de système d’équations. On se propose de déterminer le nombre
de crayons et de bocaux. La devinette est comme suit :
a) Si on met 9 crayons dans chaque bocal, il reste 2 bocaux;
b) Si on met 6 crayons dans chaque bocal, il reste 3 crayons.

Soient x et y les nombres de crayons et et de bocaux respectivement. Le système d’équations résultant est
comme suit :

A. Mhamdi
Atelier # 2. Système d’équations linéaires 14



 9(y – 2) = x



 6y = x – 3

Command Window
1 >> A = [1 -9; 1 -6]
2 >> b = [-18; 3]
3 >> det(A)
§
4 >> Res = A\b
5 >> fprintf('Le nombre de crayons est %i.\n', Res(1))
6 >> fprintf('Le nombre de bocaux est %i.\n', Res(2))


Manipulation № 7 : 

Soit le circuit électrique ci-dessous. On se donne E1 = E2 = 10 volts, R1 = R2 = 2.2kΩ et R = 1kΩ. Le système
d’équations résultant après application des lois de Kirchoff est donné par Eq. 2.1. Calculer le courant I qui
parcourt la résistance R.
R1 I1 I2 R2

V1 I V2

E1 V R E2



 E1 – R1 I1 – RI = 0

E2 – R2 I2 – RI = 0 (2.1)

 I
 = I1 + I2 .

Command Window
1 >> A = [2.2 0 1; 0 2.2 1; -1 -1 1];
2 >> b = [10; 10; 0];
§ 3 >> det(A)
4 >> X = A\b
5 >> I = X(end)*1e-3


Manipulation № 8 : 

Résoudre le système linéaire, d’inconnues x, y et z suivant



 6x + y – 5z = 10

2x + 2y + 3z = 11

 4x – 9y + 7z = 12.

A. Mhamdi
Atelier # 2. Système d’équations linéaires 15

Command Window
1 >> A = [6 1 -5; 2 2 3; 4 9 7]
2 >> b = [10; 11; 12]
§
3 >> det(A)
4 >> A\b

A. Mhamdi
Atelier Progiciel : Matlab/Octave

Atelier # 3 | Intégration numérique


Manipulation № 1 : 

Résoudre numériquement pour t dans [–π/2.25, π/2.25] l’équation différentielle suivante :

y(1) + tan(t)y = sin(2t), y(t = –π/2.25) = 1.

M-File
function [ dot_y ] = Func1(t, y)
§ dot_y = -tan(t)*y+sin(2*t);
end

Command Window
§ 1 >> [t, y] = ode45(@Func1, [-pi/2.25 pi/2.25], 1);


Manipulation № 2 : 

Résoudre numériquement pour tout t dans [0, 5] , l’équation différentielle suivante :

   
3 4 0
Ẋ = X, avec X0 = .
–4 3 1

M-File
function [ dot_X ] = Func(t, X)
§ dot_X = [3 4; -4 3]*X;
end

Command Window
§ 1 >> [t, X] = ode45(@Func, [0 5], [0; 1])


Manipulation № 3 : 

On définit une équation différentielle du premier ordre par :
dy
= F (t, y), y (t = t0 ) = y0 .
dt
Pour résoudre numériquement cette équation, on peut avoir recours à l’approximation suivante :
dy
y (t + ∆) = y(t) + ∆ ,
dt

16
Atelier # 3. Intégration numérique 17

tout en fixant un pas fini de temps ∆, un instant ti est donné par ti = t0 + i∆ et on dénote par yi =
y (t = ti ). On obtient :
yi+1 = yi + ∆F (ti , yi ).

On se propose de résoudre l’équation différentielle suivante :


dy
= y, avec y0 = 2,
dt
sur l’intervalle de temps [0, 5] avec un pas ∆ de 0.1sec.
a) Écrire le code qui permet d’implémenter cette fonction;
b) Compléter les commandes qui permettent de résoudre l’équation précédente en se référant à l’ap-
proximation donnée en début de l’exercice;
c) Utiliser la commande ode45 pour résoudre la même équation et représenter les deux solutions sur la
même figure;
d) Refaire le même travail pour
dy
+ y2 = 0, avec y0 = 1.
dt

M-File
function [ dot_y ] = func1(t, y)
§ dot_y = y;
end

Command Window
1 >> delta = 0.1; y0 = 1; t1 = (0:delta:5)';
2 >> n = length(t1); y1 = [y0; zeros(n-1, 1)];
§ 3 >> for i = 1:n-1
4 y1(i+1) = y1(i) + delta*func1(t1(i), y1(i));
5 end

Command Window
1 >> [t2, y2] = ode45(@func1, t1, 2);
§ 2 >> plot(t1, y1, t2, y2);
3 >> legend('Approximation', 'ODE45');

M-File
function [ dot_y ] = func2(t, y)
§ dot_y = -y^2;
end

Command Window
1 >> delta = 0.1; t1 = (0:delta:5)';
2 >> n = length(t1);
3 >> y1 = [1; zeros(n-1, 1)];
§ 4 >>for i = 1:n-1
5 y1(i+1) = y1(i) + delta*func2(t1(i), y1(i));
6 end
7 >> [t2, y2] = ode45(@func2, t1, 1);

A. Mhamdi
Atelier # 3. Intégration numérique 18

8 >> plot(t1, y1, t2, y2);


§ 9 >> legend('Approximation', 'ODE45');

A. Mhamdi
Atelier Progiciel : Matlab/Octave

Atelier # 4 | Interpolation polynomiale


Manipulation № 1 : 


a) Calculer le polynôme d’interpolation de Lagrange Pn de la fonction sinus définie sur l’intervalle [0, 2π]
par pas de 0.1 associé à n + 1 points équidistants. On prend x0 = 0 et xn = 2π pour n = 3, 4, 5 & 6;
(Utiliser la commande linspace.)
b) Le tracer en superposant les résultats pour les différentes valeurs de n et tracer sur le même graphique
la courbe du sinus;
c) Faire de même pour la fonction 1/(1+x2 ) sur l’intervalle [–5, 5] par pas de 0.1, avec x0 = –5 et xn = 5
pour n = 3, 4, 5 & 6.

Command Window
1 >> X = 0:0.1:2*pi; Y = sin(X);
2 >>
3 >> X3 = linspace(0, 2*pi, 4); P3 = polyfit(X3, sin(X3), 3);
4 >> X4 = linspace(0, 2*pi, 5); P4 = polyfit(X4, sin(X4), 4);
§ 5 >> X5 = linspace(0, 2*pi, 6); P5 = polyfit(X5, sin(X5), 5);
6 >> X6 = linspace(0, 2*pi, 7); P6 = polyfit(X6, sin(X6), 6);
7 >>
8 >> Y3 = polyval(P3, X); Y4 = polyval(P4, X);
9 >> Y5 = polyval(P5, X); Y6 = polyval(P6, X);

Command Window
1 >> plot(X, Y, X, Y3, X, Y4, X, Y5, X, Y6)
§
2 >> legend('Sin', 'P_3', 'P_4', 'P_5', 'P_6')

Command Window
1 >> X = -5:0.1:5; Y = 1./(1+X.^2);
2 >>
3 >> X3 = linspace(-5, 5, 4); P3 = polyfit(X3, 1./(1+X3.^2), 3);
4 >> X4 = linspace(-5, 5, 5); P4 = polyfit(X4, 1./(1+X4.^2), 4);
5 >> X5 = linspace(-5, 5, 6); P5 = polyfit(X5, 1./(1+X5.^2), 5);
6 >> X6 = linspace(-5, 5, 7); P6 = polyfit(X6, 1./(1+X6.^2), 6);
§
7 >>
8 >> Y3 = polyval(P3, X); Y4 = polyval(P4, X);
9 >> Y5 = polyval(P5, X); Y6 = polyval(P6, X);
10 >>
11 >> plot(X, Y, X, Y3, X, Y4, X, Y5, X, Y6)
12 >> legend('1/(1+x^2)', 'P_3', 'P_4', 'P_5', 'P_6')

19
Nous proposons dans ce document quelques ateliers corrigés
sur les méthodes et outils du calcul scientifique et d’analyse
numérique. Ils portent essentiellement sur :

¬ l’identification de l’intérêt du calcul scien-


tifique réalisé avec un outil logiciel per-
formant et multi-plateforme : Matlab ou
Octave;

­ le potentiel de l’application du calcul matri-


ciel;

® la modélisation & la résolution d’équations


linéaires;

¯ l’intégration numérique des équations dif-


férentielles ordinaires;

° la formulation & la résolution des pro-


blèmes d’interpolation polynomiale.

Matlab; Octave; algèbre linéaire; intégration numérique;


interpolation polynomiale.

Vous aimerez peut-être aussi