30.07.2014 Views

TP-TD

TP-TD

TP-TD

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Introduction à la Programmation par Objets<br />

(L1-IPO)<br />

<strong>TP</strong> n° 11, Printemps 2012<br />

REGRESSION LINEAIRE SUR UN NUAGE DE POINTS.<br />

Un statisticien s’intéresse aux nuages de points : il dispose d’une liste de données entières<br />

(x ; y) qu’il représente dans un plan, et va essayer de trouver une droite d’ajustement pour ce<br />

nuage. Il utilise à cet effet une droite de régression linéaire :<br />

Rappels mathématiques. La droite a pour équation y = ax + b. Il ne s’agit pas de<br />

démontrer des formules, nous allons vous les donner, en suivant la page Web :<br />

http://fr.wikipedia.org/wiki/Régression_linéaire<br />

Il suffit bien entendu de connaître a et b pour tracer la droite. On commence par noter x la<br />

moyenne des x i , et y celle des y i . Le centre du nuage a pour coordonnées ( x, y). La variance<br />

V(x) des x i mesure la dispersion des abscisses :<br />

€<br />

€<br />

€<br />

€<br />

€ cov(x,y) =<br />

V (x) = 1 ∑ (x i − x) 2<br />

n<br />

Enfin, la covariance cov(x,y) du nuage s’obtient par la formule :<br />

€<br />

1<br />

n<br />

i<br />

∑<br />

i<br />

( x i − x)<br />

y i − y<br />

( )<br />

Ah oui, la droite cherchée passe par le centre du nuage, et son coefficient directeur est<br />

cov(x, y)<br />

V (x)<br />

. Donc son équation est y =<br />

cov(x, y)<br />

V (x)<br />

cette droite pour la tracer en Processing…<br />

( x − x) +<br />

€<br />

y. Il suffit de connaître deux points de<br />

€<br />

€<br />

Ouf. Merci aux statisticiens !<br />

€<br />

€<br />


Travail informatique. Vous allez travailler uniquement dans Processing, où vous allez<br />

programmer une classe Nuage, puis une animation qui fera afficher le nuage et sa droite de<br />

régression.<br />

Préliminaire : ouvrez un nouveau sketch vierge dans Processing. Sauvez-le immédiatement<br />

sous le nom « regression ». Demandez un nouvel onglet et donnez-lui le nom « Nuage.java ».<br />

Vous programmerez la classe Nuage dans l’onglet « Nuage.java » en Java pur, et l’animation<br />

se fera en Processing dans l’onglet « regression ». Notez bien cette manière de faire ! Le<br />

travail sur les listes se fera en Java pur de manière à ne pas avoir à utiliser des casts… Notez<br />

aussi que Processing n’aime pas les accents dans les noms de fichiers…<br />

1. La classe Nuage [onglet « Nuage.java »]<br />

• Elle importera les classes ArrayList, Point et Random.<br />

• Un nuage sera représenté par une liste de points. Utilisez la classe Point de l’API.<br />

• Le constructeur prendra en paramètre la taille du canvas. Dans le constructeur, prenez un<br />

nombre aléatoire n de points (entre 30 et 50 points), et initialisez la liste avec n points tirés au<br />

hasard dans le canvas.<br />

• Programmez des méthodes calculant les moyennes, variances et covariance. Posez-vous le<br />

problème d’éviter de calculer plusieurs fois la même moyenne !<br />

• Programmez une méthode regression() calculant les coefficients a et b de la droite de<br />

régression y = ax+b et les retournant en résultat sous la forme d’un tableau {a,b}.<br />

N.B. Vous serez peut-être amenés lors de la section suivante, à compléter cette classe par de<br />

nouvelles méthodes auxquelles vous n’aviez pas pensé…<br />

2. La partie graphique [onglet « regression »]<br />

On définit un nuage n dans un canvas 300 × 300 et on l’affiche ainsi que sa droite de<br />

régression. Et tant qu’on y est, on peut en même temps afficher les caractéristiques<br />

statistiques du nuage (moyenne, variance, etc) en mode texte. Ceci est donc un dessin<br />

statique, pas une animation. Vous serez amenés à définir une fonction setup() ainsi que<br />

d’autres fonctions…<br />

EXERCICE COMPLEMENTAIRE<br />

On crée une animation avec un calcul et un affichage incrémental. On ajoute des points dans<br />

le canvas en cliquant avec la souris. A chaque clic, un nouveau point est affiché à l’endroit du<br />

clic, et la droite de régression s’ajuste automatiquement. Un peu plus compliqué mais cool…


Introduction à la Programmation par Objets<br />

(L1-IPO)<br />

<strong>TD</strong> n° 11, Printemps 2012<br />

Exercice 11.1 a) Programmez une classe Etudiant. Chaque étudiant aura un nom (une<br />

chaîne de caractères) et une liste de notes approchées sur 20. On pourra ajouter une note,<br />

demander la moyenne approchée d’un étudiant, et on programmera aussi une méthode<br />

renvoyant à la fois la note la plus basse et la note la plus haute (par exemple groupées dans<br />

un tableau à deux éléments).<br />

b) Programmez une classe Promotion. Un objet de cette classe modélisera un ensemble<br />

d’étudiants. On pourra :<br />

- ajouter un étudiant avec ses notes.<br />

- faire afficher la liste de tous les étudiants avec leur moyenne.<br />

- chercher la moyenne de l’étudiant dont on donne le nom (cf. le N.B. ci-dessous).<br />

c) Ecrivez une classe TestPromotion, comprenant une unique méthode de classe go(), sans<br />

résultat. Cette méthode initialisera avec des notes aléatoires entre 5 et 18 la promotion dont<br />

les étudiants ont pour noms : ”Adrien”, ”Carla”, ”Jiao”, ”Kevin”, ”Mehdi” et ”Sorayya”. On<br />

évitera bien entendu d’écrire six fois le même code d’initialisation… Elle affichera ensuite<br />

celui ou celle qui a la meilleure moyenne.<br />

N.B. Dans la recherche de la moyenne d’un étudiant dont on donne le nom, on pourra utiliser<br />

la méthode indexOf de la classe ArrayList, que l’on trouve dans l’API. Si vous avez<br />

le temps, essayez de ne PAS utiliser la méthode indexOf… On rappelle que l’égalité de<br />

deux chaînes de caractères utilise la méthode d’instance equals de la classe String.<br />

Exercice 11.2 a) Ecrire une méthode de classe listeVersTableau(liste) dont le paramètre<br />

liste représente une liste d’objets de type Integer, et retournant un tableau contenant les<br />

éléments de cette liste, sous la forme d’entiers usuels, dans le même ordre.<br />

b) Ecrire la méthode inverse tableauVersListe(tab).

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!