Livre_silo 30 août 2013 16:32 Page 193
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
193
7 – Pivot de Gauss et résolution de systèmes
Les faits suivants peuvent, pour la plupart, constituer de petits exercices de mathématiques
de seconde année.
• Les matrices d’homothéties λI n ont pour conditionnement ¹⁴ 1.
• Si A est orthogonale, alors κ(A) = 1.
• Pour une matrice diagonale inversible, le conditionnement est le rapport entre les modules maximal et minimal des éléments diagonaux.
• Pour une matrice symétrique réelle de valeurs propres (réelles, forcément) λ 1 , ..., λ n , le
conditionnement est le rapport entre le maximum et le minimum des |λ i |.
On va terminer avec deux cas particuliers intéressants : les matrices de Hilbert et de Virginie, qu’ on a évoquées dans les sections précédentes.
for n in [10,100,1000]:
spectre = numpy.linalg.eigvals(Virginie(n))
print(numpy.max(spectre)/numpy.min(spectre))
48.3741500787
4133.6429268
406095.042659
Le spectre de V n est en fait parfaitement connu : il est constitué des réels de la
forme 2
(
1 + cos
kπ
n + 1
)
, pour k décrivant 1, n. On en déduit sans trop de mal que
κ(V n ) ∼
4n
2
π 2 et, puisque
4
π 2 ≃ 0.405, les résultats expérimentaux semblent cohérents
avec la théorie !
Exercice 7.12 À l’aide de la fonction eigvals de la sous-bibliothèque numpy.linalg, qui calcule les valeurs propres d’une matrice, déterminer le conditionnement de Hn, pour n ∈ 2, 20. Ces résultats vous
semblent-ils fiables ?
for n in range(2,15):
spectre = numpy.linalg.eigvals(Hilbert(n))
kappa = numpy.max(spectre)/numpy.min(spectre)
print(n,kappa,numpy.log(kappa)/n)
(2, 19.281470067903978, 1.4795722673054559)
(3, 524.05677758606339, 2.0872000108743429)
(4, 15513.738738929998, 2.4123703201416862)
(5, 476607.25024226878, 2.6148896111914297)
(6, 14951058.641519276, 2.7533821112392776)
(7, 475367356.07704318, 2.854228349186942)
(8, 15257575750.674316, 2.9310427483982773)
(9, 493153514278.87506, 2.9915651500563918)
(10, 16025161728345.84, 3.0405181210936822)
(11, 522138774130152.75, 3.0808140472093792)
(12, 17115434512705980.0, 3.1148964212000259)
(13, 1.3195210596549663e+18, 3.2095231162351037)
__main__:4: RuntimeWarning: invalid value encountered in log
(14, -3.254915640839065e+17, nan)
14. Ici, et pour les exemples suivants, le conditionnement est donné pour la norme subordonnée à la norme
euclidienne canonique de R n .
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
193
7 – Pivot de Gauss et résolution de systèmes
Les faits suivants peuvent, pour la plupart, constituer de petits exercices de mathématiques
de seconde année.
• Les matrices d’homothéties λI n ont pour conditionnement ¹⁴ 1.
• Si A est orthogonale, alors κ(A) = 1.
• Pour une matrice diagonale inversible, le conditionnement est le rapport entre les modules maximal et minimal des éléments diagonaux.
• Pour une matrice symétrique réelle de valeurs propres (réelles, forcément) λ 1 , ..., λ n , le
conditionnement est le rapport entre le maximum et le minimum des |λ i |.
On va terminer avec deux cas particuliers intéressants : les matrices de Hilbert et de Virginie, qu’ on a évoquées dans les sections précédentes.
for n in [10,100,1000]:
spectre = numpy.linalg.eigvals(Virginie(n))
print(numpy.max(spectre)/numpy.min(spectre))
48.3741500787
4133.6429268
406095.042659
Le spectre de V n est en fait parfaitement connu : il est constitué des réels de la
forme 2
(
1 + cos
kπ
n + 1
)
, pour k décrivant 1, n. On en déduit sans trop de mal que
κ(V n ) ∼
4n
2
π 2 et, puisque
4
π 2 ≃ 0.405, les résultats expérimentaux semblent cohérents
avec la théorie !
Exercice 7.12 À l’aide de la fonction eigvals de la sous-bibliothèque numpy.linalg, qui calcule les valeurs propres d’une matrice, déterminer le conditionnement de Hn, pour n ∈ 2, 20. Ces résultats vous
semblent-ils fiables ?
for n in range(2,15):
spectre = numpy.linalg.eigvals(Hilbert(n))
kappa = numpy.max(spectre)/numpy.min(spectre)
print(n,kappa,numpy.log(kappa)/n)
(2, 19.281470067903978, 1.4795722673054559)
(3, 524.05677758606339, 2.0872000108743429)
(4, 15513.738738929998, 2.4123703201416862)
(5, 476607.25024226878, 2.6148896111914297)
(6, 14951058.641519276, 2.7533821112392776)
(7, 475367356.07704318, 2.854228349186942)
(8, 15257575750.674316, 2.9310427483982773)
(9, 493153514278.87506, 2.9915651500563918)
(10, 16025161728345.84, 3.0405181210936822)
(11, 522138774130152.75, 3.0808140472093792)
(12, 17115434512705980.0, 3.1148964212000259)
(13, 1.3195210596549663e+18, 3.2095231162351037)
__main__:4: RuntimeWarning: invalid value encountered in log
(14, -3.254915640839065e+17, nan)
14. Ici, et pour les exemples suivants, le conditionnement est donné pour la norme subordonnée à la norme
euclidienne canonique de R n .
