Adloun

Une puissance de matrice, conjecturée puis démontrée

Exercice · niveau 2 · mathématiques approfondies (ECG 1re année), chapitre 11 — Informatique et algorithmique · Matrices et systèmes linéaires

Énoncé

Soit . Conjecturer en comparant al.matrix_power(M, n) à une formule, pour allant de à , puis démontrer la conjecture.

Corrigé


import numpy as np
import numpy.linalg as al

M = np.array([[1, 2], [0, 1]])

for n in range(1, 11):
    A = al.matrix_power(M, n)
    B = np.array([[1, 2 * n], [0, 1]])    # la formule conjecturee
    # le plus grand ecart, coefficient par coefficient
    print(n, np.max(np.abs(A - B)))

Ce que la machine affiche : un sur chacune des dix lignes. La conjecture

est donc confirmée pour .

La démonstration, par récurrence. L'initialisation en est immédiate. Supposons la formule vraie au rang ; alors

qui est la formule au rang . Elle vaut donc pour tout .

Le point délicat. Dix vérifications ne démontrent rien : elles disent seulement qu'aucun contre-exemple n'apparaît parmi les dix premiers cas. La machine suggère la formule, la récurrence l'établit. C'est exactement le partage des rôles que le programme attend de l'informatique.

Un détail de code. On compare par np.max(np.abs(A - B)) et non par A == B : ce test rend un tableau de booléens, pas un booléen. Sur des coefficients flottants, on comparerait d'ailleurs cet écart à un petit seuil plutôt qu'à zéro.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.