TP PYTHON - 07 4
[Qu. 5] Point extrémaux d’une fonction sur le nuage. Étant donnée une fonction fdéfinie de R2dans
R, on souhaite déterminer un point du nuage qui minimise fsur le nuage et un point qui la maximise
sur le nuage.
1) Écrire une fonction argValeurMin de paramètres X,Yet fqui retourne un point du nuage qui
minimise la fonction fsur le nuage.
2) Vous avez peut-être remarqué que les animations réalisées dans la question 4 n’étaient pas très
fluides. Même en réduisant le temps de pause et avec des nuages peu volumineux, cela reste lent.
On peut penser que ceci provient du fait que le nuage est recréé et redessiné totalement à chaque
fois.
Si l’on ne doit modifier que l’aspect de certains points du nuage, il est donc maladroit de redessiner
tout le nuage à chaque modification de celui-ci. On peut alors utiliser deux membres modifiables
de l’objet renvoyé par la fonction scatter :_facecolors, qui contient la liste des couleurs des
points sous la forme de quadruplets (r,g,b,t), t indiquant de niveau de transparence et _sizes qui
permet d’accéder aux tailles de ces points.
Essayer le script suivant :
X=[random() for kin range(100)]
Y=[random() for kin range(100)]
couleur=[(0,0,1,0.5) for kin range(100)]
taille=[50 for kin range(100)]
nuage=scatter(X,Y,c=couleur,s=taille)
for iin range(50):
k=randint(0,99)
nuage._facecolors[k]=(1,0,0,1)
nuage._sizes[k]=150
pause(0.1)
Attention : Il est indispensable de mémoriser l’objet renvoyé par scatter dans une variable
pour pouvoir utiliser les fonctions précédentes et modifier l’aspect du nuage. Le nombre de points,
de couleurs et de tailles sont fixés à l’initialisation.
3) On aimerait visualiser cette recherche en traduisant graphiquement l’algorithme utilisé dans
la fonction argValeurMin. Chaque point pourra prendre quatre couleurs di↵érentes durant le
déroulement de l’algorithme et en prendra trois au moins. Suivant que le point, n’a pas encore été
examiné, est en train d’être examiné, est le point qui réalise le minimum des points déjà examinés,
a déjà été examiné, sa couleur et sa taille, éventuellement, devront être di↵érentes.
Par exemple, l’entête de la fonction peut se présenter comme suit :
def visuelArgValeurMin(X,Y,f,ptInit,ptMin,ptVu,ptCourant,marque)
où les paramètres ptInit,ptMin,ptVu,ptCourant sont des couples (taille,couleur) décrivant
les di↵érents états possibles d’un point du nuage.
4) Tester votre fonction en ajoutant le code suivant après sa définition dans le script :
def fLin(x,y):
return 2*x+3*y
visuelArgValeurMin([random()*50 for kin range(50)],[random()*50
for kin range(50)],fLin,(200,(1,1,1,1)),(400,(0,1,1,1))
,(200,(0,0,0,1)),(400,(1,0,0,1)),’*’)
5) Écrire une fonction nommée visuelArgValeurMinMax similaire à la précédente pour visualiser la
recherche simultanée d’un minimum et d’un maximum d’une fonction fsur le nuage.
6) Utiliser la fonction précédente pour la recherche d’un point le plus proche et d’un point le plus
éloigné du point moyen d’un nuage.