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.