Vous êtes sur la page 1sur 6

UPMC - Licence Elec.

L2 S2
UE Calcul Scientifique ; initiation MATLAB (LE205)

d) execution de cette macro


>> TP3_data
>> who
>> help TP3_data

TP3 : Rgression et interpolation


PREMIERE PARTIE : COURS ET EXEMPLES

II.

Thmes abords :
* Macros simples
* Ajustement et interpolation polynomiaux,
* Evaluation de la qualit dune rgression,
* Rgression de puissance et exponentielle,
* Interpolation par spline

1. Introduction

Remarque IMPORTANTE : dans ce TP, lorsquun exemple ou un exercice est donn, vous
tes invit fortement le raliser et en noter le rsultat.
I.

Interpolation polynomiale

Macros simples

A laide du menu File , nous allons crer un fichier exemple.m et lditer. Ceci est un
macro simple ou on dclarera deux vecteurs, afin de pouvoir les utiliser plus tard. Pour
modifier le fichier exemple.m aprs lavoir crer, nous pourrons utiliser la commande edit.

Les techniques dcrites dans ce TP sont employes pour obtenir des relations entre donnes
exprimentales: c'est l'objet de la rgression. Les conomistes utilisent les rgressions pour la
prvision. En ingnierie, les rgressions sont employes dans des applications qui vont audel de la simple interpolation. Par exemple, la forme gnrale de l'quation caractrise un
certain processus peut tre connu thoriquement, mais pas les valeurs des coefficients qui
apparaissent dans l'quation. Des tests sont ensuite effectus pour ce processus, et les
variables concernes sont mesures. La courbe de la forme thorique attendue ajuste aux
donnes exprimentales par rgression, dfinissant ainsi les paramtres de la courbe. Les
modles calibrs par rgression sont utiliss dans les calculs de conception et dans les
simulations.
2. Ajustement et interpolation polynomiale
Dans ce TP, nous allons utiliser un tableau de mesures de la densit de leau en fonction de la
temprature. Les vecteurs temperature et densite sont dfinis pour vous dans le macro
TP3_data.m. Ils contiennent les valeurs suivantes :

Dans le fichier, crivez les lignes suivantes :


a) une premire macro
% EXEMPLE est un macro simple o on dclare deux vecteurs
% que lon appelle a et b
a = [3 2 4 5 3 1] ;
b = [2 7 9 10 12 14] ;

Temp. C
Densit t/m3

0
0.99987

2
0.99997

4
1.00000

6
0.99997

8
0.99988

10
0.99973

12
0.99953

14
0.99927

16
0.99897

18
0.99846

Temp. C
Densit t/m3

20
0.99805

22
0.99751

24
0.99705

26
0.99650

28
0.99664

30
0.99533

32
0.99472

34
0.99409

36
0.99333

38
0.99326

Vrifiez le contenu des deux vecteurs et tracer la densit en fonction de la temprature.


Dans le workspace, tapez :
f) affichage des donnes
>> size(temperature), size(densite)
>> [temperature densite]
>> plot(temperature,densite)

b) utilisation de la premire macro


>> exemple
>> who
>> help exemple
>> a, b, a.*b, a*b
Pour la suite nous aurons besoin du macro TP3_data.m qui est prt lusage sur vos PC.
Afin de vrifier que le macro existe, et pour voir son contenu, utilisez la commende edit. NE
PAS MODIFIER LE CONTENU DU FICHIER !!!

En observant le graphe, nous pouvons dduire que la courbe pourrait tre estime comme une
courbe du second degr. Il nous faut donc dterminer les trois coefficients c1, c2 et c3 de
lquation suivante : y = c1 x 2 + c2 x + c3
Cela peut tre rsolu en posant le problme comme un systme dquations o les inconnues
sont c1, c2 et c3. Sous forme matricielle, le systme scrit :

c) dition de la macro du TP
>> edit TP3_data
Ensuite, excutez ce macro, qui contient des donnes qui seront ncessaire pour la suite du
TP. Plusieurs vecteurs et matrices ont t dclars.
1

x12
2
x
A= 2
M
2
x m

x1
x2
M
xm

1
y1
c1

y
1
, Y = 2 , C = c 2
M
M
c 3


1
ym

o [x1xm] sont la variable indpendante (ex : tempratures) et [y1ym] sont la variable


dpendante (ex : densit). Ce systme peut tre rsolu comme dans le TP prcdent par une
estimation aux moindres carres.
Sous MATLAB, il existe une fonction qui gnre la matrice A et les vecteurs puis la rsoud
pour Y. Les arguments de polyfit sont :
1. la variable indpendante ;
2. la variable dpendante ;
3. le degr de la courbe ajuster.
g) interpolation de degr 2
>> format long
>> C2=polyfit(temperature,densite,2)

>> grid
>> legend(residual 2, residual 3);
>> xlabel(temperature);
>> figure(2)
>> % on peut aussi les afficher selon la variable dpendante
>> plot(densite,resid2,densite,resid3)
>> grid
>> text(densite(20),resid2(20),residual 2)
>> text(densite(20),resid3(20),residual 3)
On peut aussi calculer la somme des erreurs au carr (SSE pour Sum of the Squarred Errors)
afin dapprcier la qualit de lapproximation :
k) somme des erreurs au carr
>> SSE2=sum(resid2.^2)
>> SSE3=sum(resid3.^2)

III.

Une fois ces coefficients du polynme connus, on peut estimer les valeurs de la courbe
estime :

Rgression de puissance

Les courbes polynomiales ne sont pas les seules courbes utilises pour ajuster des donnes.
Par exemple, certains phnomnes peuvent tre modliss par une fonction puissance :
y = a xb

h) estimation des valeurs


>> y2=polyval(C2,temperature)

o a et b sont des constantes.

Pour un degr 3 :

Cette quation caractrise gnralement des processus croissant rapidement. Comme prsent
dans l'exemple suivant, de tels cas peuvent se rduire des rgressions linaires.

i) interpolation de degr 3
>> C3=polyfit(temperature,densite,3) ;
>> y3=polyval(C3,temperature)
>> plot(temperature,densite,b, temperature,y2,r,temperature,y3,g)
>> % agrandir une zone
>> xx=temperature(1 :10) ; yy=densite(1 :10) ;
>> yy2=y2(1 :10) ;
>> yy3=y3(1:10);
>> plot(xx,yy,b,xx,yy2,r,xx,yy3,g);

Ils peuvent tre rsolus en considrant la proprit des logarithmes naturels :


ln y = ln a + b ln x
En posant u=ln x et v=ln y, on se ramne une rgression dordre 1 : v = ln a + b u

Exemple : Production d'une culture de sriole (poisson) ceinture

3. Evaluation de la qualit dune rgression


Pour voir laquelle des rgressions est la meilleure, nous allons dabord calculer et afficher les
rsidus :
j) calcul et affichage des rsidus
>> resid2=densite-y2 ;
>> resid3=densite-y3 ;
>> figure(1)
>> plot(temperature,resid2,k-, temperature,resid3,r :);

Anne
1961
1964
1967
1970
1973

Tonnes
1900
9500
21200
43300
80300

Anne
1976
1979
1982
1984

Tonnes
101600
154900
146300
154500

Un tableau fish avec ces valeurs a t dfini pour vous dans le macro TP3_data.m.
Affichez le contenu du tableau :

l) les donnes fish


>> size(fish)
>> fish

38.2
43.8
41.8

Nous allons maintenant utiliser les donnes de fish :

Un tableau turb = [ taille, poids, surface] avec ces valeurs est dfini dans le macro
TP3_data.m. Affichez dabord son contenu :

l-bis) utilisation de ces donnes


>> year = fish( :,1) ; mass=fish( :,2) ;
>> x=year-1960
>>loglog(x,mass) % affichage en chelle logarithmique
>> % on vrifie ainsi quune rgression en puissance semble approprie
>> u=log(x) ; v=log(mass) ;
>> c=polyfit(u,v,1)
>> a=exp(c(2))
>> b=c(1)
>> y=a*x.^b

415.07
556.30
518.70

40.8
39.5
36.3

1416.2
1441.0
1089.6

478.46
482.95
400.67

m) les donnes turb


>> size(turb)
>> turb
m-bis) approximation en puissance des donnes turb
>> taille=turb( :,1) ; mass=turb( :,2) ;
>> plot(taille,mass) ;
>> % tri
>> [ l i ]=sort(taille)
>> for j=1 :10, m(j)=mass(i(j)); end;
>> [l m] % attention erreur
>> size(l), size(m)
>> [l m]

Comparons la rgression et les donnes :


l-ter) rgression des donnes
>> [ mass y ] % comparaison des valeurs
>> plot(year, y, year, mass,o)
>> title(Regression en puissance de la production de sriolle)
>> xlabel(anne)
>> ylabel(tonnes)

>> % test de lapproximation en puissance


>> loglog(l,m)
>> u=log(l) ; v=log(m) ;
>> c=polyfit(u,v,1)
>> a=exp(c(2))
>> b=c(1)
>> mi = a*l.^b
>> plot(l,mi,l,m,o)
>> resid = m mi; SSE1=sum(resid.^2)

Ajoutons en texte lquation calcule :


l-quad) lquation :
>> t =[tonnes= num2str(a) x^b, b= num2str(b) ]
>> text(year(4),y(4),t) ;

IV.

1005.5
1879.0
1638.0

>> % test de lapproximation en loi exponentielle


>> semilogy(l,m)
>> c=polyfit(l,v,1)
>> a=exp(c(2))
>> b=c(1)
>> mi = a*exp(b*l);
>> plot(l,mi,l,m,o)
>> title(Approximation en une loi exponentielle)
>> xlabel(Taille des turbots, cm)
>> ylabel(Poids des turbots, g)
>> resid2=m-mi ;
>> SSE2=sum(resid2.^2)

Rgression exponentielle

Nous voulons approximer des donnes par une loi exponentielle :


y = a ebx
Elle peut tre aussi rduite une rgression linaire, en prenant le logarithme :
ln(y) = ln(a) + b x
Exemple : Donnes de turbots reproducteurs (poissons)
Taille
cm
34.3
38.7

Poids
g
962.3
1264.5

Surface
cm2
359.96
448.13

Taille
cm
36.8
40.0

Poids
g
936.0
1490.8

Surface
cm2
391.20
479.79

DEUXIEME PARTIE : EXERCISES

V.

Interpolation par splines


Exercice 1 : culture de dorades roses au Japon

Les splines consistent approximer localement les donnes par des courbes locales. Il sagit
dune interpolation qui passe par les donnes fournies.

Le tableau ci-dessous contient des donnes sur la production de dorades roses au Japon.
Estimez ces donnes par une fonction puissance et une courbe exponentielle. Comparez les
rsultats.
Anne Tonnes
Anne Tonnes
1964 100
1976 6400
1967 200
1979 12200
1970 500
1982 20200
1973 1300
1984 26100

Exemple : Reprenons les donnes sur la densit de leau en fonction de la temprature.


Avant de calculer les splines d'interpolation, nous effectuons une interpolation polynomiale
qui a donn les meilleurs rsultats prcdemment :
n) splines : affichage des donnes
>> C3 = polyfit(temperature, densite, 3) ; y3 = polyval(C3, temperature) ;

Exercice 2 : talonnage dinstrument


Puis nous effectuons linterpolation par spline :
n-bis) splines : lusage
>> help spline
>> ys = spline(temperature, densite, temperature) ;
>> format long
>> [temperature y3 ys]

On utilise six valeurs standards pour talonner un instrument. Le tableau suivant prsente les
valeurs affiches par l'instrument en fonction des valeurs standards (exactes). Effectuez une
rgression au premier degr sur ces donnes et utilisez les rsultats pour tracer une courbe
d'talonnage.
Mesure
0.5030
0.7229
0.7802
1.2106
1.7607
2.4649

>> resid3 = densite y3; resids= densite - ys;


>> plot(temperature, resid3, temperature, resids)
>> xlabel('Temperature, :x:')
>> ylabel('Residuals of interpolations')
>> text(x(2), resid3(2) , 'resid3')
>> text(x(4) , resids(4) , 'resids')

Relle
0
1.0000
2.0000
5.0000
10.0000
15.0000

Exercice 3 : viscosit de leau

>> e3 = sqrt (sum(resid3.^2)


>> es = sqrt(sum(resids.^2)

Le tableau ci-dessous contient des donnes de viscosit cinmatique d'eau frache entre OC
et 28C. Dterminez la viscosit cinmatique qui correspond 0.5, 1.5, 27.5 C.
Les valeurs de la viscosit sont donnes dans le vecteur EX3 du macro TP3_data.m

>> xi=1 : 2 : 39; yi = spline(x, y, xi);


>> plot(temperature, densite, xi, yi, 'o')
>> title{'Interpolation de la densit de leau')
>> xlabel('Temperature de l eau, deg C')
>> ylabel(densit de l eau, t/m^3)
>> plot(x(1 :10),y(1 :10),xi(1 :10),yi(1 :10),o)

Temprature
C

m2/s

Temprature
C

m2/s

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14

1.79
1.73
1.67
1.62
1.57
1.52
1.47
1.43
1.39
1.33
1.31
1.27
1.24
1.20
1.17

15
16
17
18
19
20
21
22
23
24
25
26
27
28

1.14
1.11
1.08
1.06
1.03
1.01
0.983
0,960
0,938
0.917
0.896
0.876
0.857
0.839

Exercice 4 : pression atmosphrique


Altitude
m
0
100
200
300
400
500
600
700
800
900
1000

Pression Moyenne
mbar
1013
1001
989
977
965
959
942
932
921
902
894

Section
aire
mm2

Courant
alternatif
A

Section
aire
mm2

Courant
alternatif
A

0.75
1
1.5
2.5
4
6
10
16
25
35

16
20
25
34
45
57
78
104
137
168

50
70
95
120
150
185
240
300
400
500

210
260
310
365
415
475
560
645
770
880

Exercice 7 : thermomtre rsistance en platine


Les valeurs sont donnes dans le tableau EX7 du macro TP3_data.m
Temprature
C
0
10
20
30
40
50
60
70
80
90
100
110
120
130
140
150
160

Le tableau ci-dessus contient des valeurs de pression d'une atmosphre stable pour des
altitudes de 0 1000m au-dessus du niveau de la mer. Thoriquement, ces donnes suivent
une loi exponentielle de la forme
p = a e-kh
1. Ralisez une rgression exponentielle sur ces donnes et trouvez les valeurs de a et de k
2. En utilisant les valeurs trouves au (1), calculez les pressions qui correspondent aux
altitudes 50, 150,250, . . . ,950 m. Tracez ces valeurs avec celles contenues dans le tableau
3. Extrapolez pour des altitudes de 1500, 2000 et 2500 m. Comparez vos valeurs avec celles
indiques par le US. Standard Atmosphere 1962, soit respectivement 843, 795 et 747 mbar.

Exercice 5 : chelle de temprature


Comme nous l'avons constat dans le TP prcdent, la courbe qui reprsente la relation entre
les chelles Celsius et Fahrenheit passe par les points (0 32), (100 212). Utilisez une
rgression linaire pour retrouver la formule :
C = 5/9 ( F - 32)
Ensuite, utilisez la fonction polyval pour obtenir la temprature en degrs Celsius qui
correspond 96.8 F (temprature du corps humain).

Exercice 6 : densit de courant dans un conducteur en cuivre


La rsistance dans un conducteur de cuivre n'est pas constante. Le tableau ci-dessous contient
les valeurs de courant support par un conducteur de section comprise entre 0.75mm2 et
500mm2. Utilisez ces donnes pour effectuer :
1. une rgression du second degr;
2. une rgression du troisime degr.
Comparez le rsultat des deux rgressions.

Rsistance
Ohms
100.00
103.90
107.79
111.67
115.54
119.40
123.24
127.07
130.89
134.70
138.50
142.29
146.06
149.82
153.58
157.31
161.04

Temprature
C
170
180
190
200
210
220
230
240
250
260
270
280
290
300
310
320
330

Rsistance
Ohms
164.76
168.46
172.16
175.84
179.51
183.17
186.32
190.45
194.07
197.69
201.29
204.88
208.45
212.02
215.57
219.12
222.65

Nous allons prsenter une nouvelle faon de mesurer la temprature partir de variations de
rsistance. En effet, la rsistance d'un conducteur ou d'un semi-conductcur fluctue avec la
temprature.
Le tableau ci-dessus contient les valeurs de rsistance pour un thermomtre rsistance en
platine dont les tempratures sont comprises entre 0 C et 330 C. Gnralement, on mesure
la rsistance pour en dduire la temprature. Par consquent:
1. Effectuez une rgression au premier degr et dterminez les coefficients de l'quation qui
permettent d'obtenir la temprature comme une fonction de la rsistance;
2. Trouvez les tempratures qui correspondent aux rsistances suivantes 125, 150, 175 et
200 ohms;
3. Tracez les valeurs obtenues ci-dessus sur le graphique qui affiche la temprature en
fonction de la rsistance;
4. Effectuez aussi une rgression du second degr et assurez-vous que cela n'amliore pas les
rsultats de faon significative.
Indication: Considrez le coefficient du terme de la puissance la plus leve.
10

Exercice 8 : un circuit varistance


Une varistance reprsente n'importe quel support l'tat solide avec deux terminaux traverss
par un courant lectrique I qui augmente considrablement plus vite qu'une tension V. La
relation entre courant et tension peut tre dcrite par l'quation :
I = a Vn
o n prend gnralement des valeurs comprises entre 3 et 35. Les varistances peuvent tre
considres comme des rsistances qui dpendent non linairement de la tension. Elles sont
particulirement utilises dans la protection des quipements contre les surtensions.
Supposons les valeurs suivantes mesures pour un type de varistances.
Voltage,V
0
12
18
25

Courant, mA
0
0.5
1
2.3

Voltage,V
30
35
40
45

Courant, mA
3.5
5.7
8.8
12.9

(1) Tracez les courants mesurs en fonction des tensions mesures;


(2) Effectuez une rgression de puissance pour dterminer le a et le n de l'quation ci-dessus.
(3) Supposez qu'on applique une tension alternative d'amplitude 48 V et de frquence 50Hz
la varistance. Tracez la tension et le courant, et valuez quel point la varistance dforme le
courant.
Indication: Vous ne pouvez pas utiliser u.^n pour les valeurs ngatives de u; utilisez
sign(u).*abs (u) ou une rcriture de cette expression. Quand vous effectuez la rgression, ne
prenez pas en compte le premier couple de mesures, celui dont les valeurs sont nulles.
Pourquoi ?

Exercice 9 : un circuit varistance


Lisez lexercice prcdent et considrez les valeurs suivantes :
Voltage,V
0
50
80
100

Courant,mA
0
0.03
0.11
0.2

Voltage,V
150
200
250
300

Courant,mA
0.65
1.5
3
5

(a) Tracez le courant mesur en fonction de la tension mesure ;


(b) Effectuez une rgression exponentielle pour dterminer les termes a et n de l'quation de
lexercice prcdent.
(c) Supposez qu'on applique une tension alternative d'amplitude 48 V et de frquence 50Hz
la varistance. Tracez la tension et le courant, et observez quel point la varistance dforme le
courant.
Indication: Vous ne pouvez pas utiliser u.^n pour les valeurs ngatives de u, utilisez
sign(u).*abs(u) ou une rcriture de cette expression.

11