Adloun

mathématiques complémentaires (terminale) · Chapitre 10 · Exercice de TD

Tout calculer, et tout vérifier, en Python

Statistique à deux variables quantitatives · niveau 3 (difficile)

Énoncé

Tout calculer, et tout vérifier, en Python.

Écrire un programme qui, à partir de deux listes de même longueur, calcule , , la covariance, les coefficients et de la droite des moindres carrés, le coefficient et les résidus — puis vérifie les deux propriétés du cours. L'appliquer à la série de tailles de l'enfant.

Corrigé

  • Des fonctions courtes, une par notion. On suit exactement les définitions du cours, sans bibliothèque, pour que chaque ligne soit relisible.

from math import sqrt

def moyenne(v):
    return sum(v) / len(v)

def covariance(x, y):
    xb, yb = moyenne(x), moyenne(y)
    n = len(x)
    return sum((x[i] - xb) * (y[i] - yb) for i in range(n)) / n

def variance(v):
    vb = moyenne(v)
    return sum((t - vb) ** 2 for t in v) / len(v)

def ajustement(x, y):
    a = covariance(x, y) / variance(x)
    b = moyenne(y) - a * moyenne(x)
    return a, b

def correlation(x, y):
    return covariance(x, y) / sqrt(variance(x) * variance(y))
  • Les deux contrôles, écrits comme des contrôles. Un assert ne coûte rien et interdit de publier un résultat faux.

def bilan(x, y):
    a, b = ajustement(x, y)
    residus = [y[i] - (a * x[i] + b) for i in range(len(x))]
    # Controle 1 : la droite passe par le point moyen.
    assert abs(a * moyenne(x) + b - moyenne(y)) < 1e-9
    # Controle 2 : la somme des residus est nulle.
    assert abs(sum(residus)) < 1e-9
    return a, b, correlation(x, y), residus

age    = [2, 4, 6, 8, 10]
taille = [88, 103, 116, 129, 139]
a, b, r, e = bilan(age, taille)
print(round(a, 4), round(b, 4))     # 6.4 76.6
print(round(r, 4))                  # 0.9977
print([round(t, 4) for t in e])     # [-1.4, 0.8, 1.0, 1.2, -1.6]
  • Lecture. Le programme retrouve exactement les valeurs calculées à la main : , , et des résidus de somme nulle. Les deux assert passent — s'ils échouaient, ce serait le signe d'une liste mal saisie ou de deux listes de longueurs différentes.

Le même travail se fait en deux lignes avec numpy.polyfit et numpy.corrcoef ; écrire les fonctions une fois soi-même reste le meilleur moyen de savoir ce que ces deux lignes calculent.

100 % gratuit

Essaie le suivant avec le tuteur

Faire l'exercice suivant avec le tuteur

Sans compte : le cours et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →