UNIVERSITÉ PARIS OUEST NANTERRE LA DÉFENSE U.F.R. SEGMI Année universitaire 2015 2016 M1 Économie Appliquée Cours de B. Desgraupes Corrigé - Méthodes Numériques Séance 03: Bases du calcul numérique Corrigé ex. 1: Changement de base Montrer que la norme de Frobenius d une matrice carrée A est invariante par un changement de base par une matrice orthogonale. Une matrice orthogonale P est une matrice telle que P 1 = t P. Dans le changement de base, la matrice A devient A = P 1.A.P = t P.A.P. On a donc A 2 2 = Tr( t A.A ) = Tr( t ( t P.A.P ). t P.A.P ) = Tr( t P. t A.P. t P.A.P ) = Tr(P 1. t A.P.P 1.A.P ) = Tr(P 1. t A.A.P ) = Tr( t A.A) = A 2 2 Corrigé ex. 2: Comparaison de normes Montrer que, pour toute matrice carrée A, on a : 2 2 1 Corrigé ex. 3: Exponentielle matricielle ( ) 0 1 On considère la matrice A =. 1 0 3-1 ) Calculer sa norme de Frobenius et sa norme spectrale. > A <- matrix(c(0,1,-1,0),nrow=2) [,1] [,2] [1,] 0-1 [2,] 1 0 La norme de Frobenius est la racine de la somme des carrés des coefficients de la matrice :
> NF <- sqrt(sum(a^2)) [1] 1.414214 Pour la norme spectrale, on calcule les valeurs singulières de t A A. On a ( ) t 1 0 A A = 0 1 Donc les valeurs singulières sont égales à 1 et la norme 2, qui est la plus grande valeur singulière, vaut aussi 1. 3-2 ) Calculer la matrice exp(ta) où t R. On va diagonaliser la matrice A. La matrice diagonale s écrit : On en déduit D = P 1.A.P A = P.D.P 1 = exp(ta) = P. exp(td).p 1 Corrigé ex. 4: Norme d une matrice orthogonale Montrer que pour toute matrice orthogonale P de taille n, on a P 2 = 1 et P F = n. Une matrice orthogonale P est une matrice telle que P 1 = t P. Pour calculer la norme 2, on doit trouver les valeurs singulières de la matrice P. Il faut donc chercher les valeurs propres de la matrice t P P. Or P est orthogonale et, par conséquent, t P P = P 1.P = I. Donc les valeurs propres sont toutes égales à 1. Les valeurs singulières sont les racines carrées positives et sont donc elles aussi égales à 1. Finalement la norme 2, qui est la plus grande des valeurs singulières, vaut aussi 1. Pour la norme de Frobenius : P 2 F = Tr( t P P ) = Tr(I) = n = P F = n Corrigé ex. 5: Conditionnement κ F On veut définir une fonction de R pour calculer le conditionnement d une matrice carrée en norme de Frobenius. Appelons condf la fonction à définir. On sait que la norme de Frobenius est la racine de la somme des carrés des coefficients. On doit donc calculer cette norme pour les matrices A et A 1 et faire leur produit. Voici le code : > condf <- function(a) { + N <- sqrt(sum(a^2)) + NI <- sqrt(sum(solve(a)^2)) + return(n*ni) + } Une autre manière d écrire la fonction, en utilisant la fonction norm pour calculer la norme de Frobenius, serait : 2
> condf <- function(a) { + return( norm(a,"f")*norm(solve(a),"f") ) + } Application : calculons le conditionnement de la matrice A = 1 2 3 2 3 1. 3 1 2 > A <- matrix(c(1,2,3,2,3,1,3,1,2),nrow=3) [,1] [,2] [,3] [1,] 1 2 3 [2,] 2 3 1 [3,] 3 1 2 > condf(a) [1] 5.400617 Corrigé ex. 6: Borne inférieure du conditionnement 6-1 ) Montrer que pour toute norme matricielle on a I 1 où I est la matrice unité. On part de l identité I = I 2, on prend la norme des deux membres et on applique la propriété de multiplicativité : I = I 2 I I = I 2 En divisant par I, il reste bien 1 I. 6-2 ) En déduire que, quelle que soit la norme utilisée, la conditionnement d une matrice est supérieur ou égal à 1. On prend une matrice inversible A et on part de l identité I = A.A 1 En prenant les normes des deux membres, on obtient : I = A.A 1 A 1 = κ(a) Donc finalement κ(a) I. Or on a vu à la question précédente que I 1. On a donc κ(a) 1 Corrigé ex. 7: Perturbation d un système x 1 + 2x 2 3x 3 4x 4 = 4 x 1 x 2 + 2x 3 + x 4 = 6 2x 1 + 3x 2 x 3 + x 4 = 6 2x 1 + 2x 2 + 3x 3 x 4 = 7 3
7-1 ) On pose A = 1 2 3 4 1 1 2 1 2 3 1 1 2 2 3 1 et b = 4 6 6 7 On déclare ces matrices dans R de la manière suivante : > A <- matrix(c(-1,1,2,-2,2,-1,3,2,-3,2,-1,3,-4,1,1,-1),nrow=4) > b <- c(-4,6,-6,7) Pour résoudre le système dans R, on utilise la fonction solve comme ceci : > x <- solve(a,b) [1] 1-1 3-2 7-2 ) On introduit des perturbations dans A et b en ajoutant respectivement 0.03 0.06 0.06 0 0.06 P = 0.08 0.03 0.22 0.09 0.05 0.15 0.11 0.08 et p = 0.02 0.08 0.07 0.04 0 0.06 0.16 On veut résoudre le système perturbé (A + P )y = b + p : > y <- solve(a+p,b+p) [1] 1.696098-1.160112 3.443296-2.627883 7-3 ) La variation relative de x en norme euclidienne est le rapport x = y x. On calcule ces normes comme ceci : > ndx <- sqrt(sum((y-x)^2)) [1] 1.049255 > nx <- sqrt(sum(x^2)) [1] 3.872983 > varx <- ndx/nx [1] 0.2709165 7-4 ) On calcule le conditionnement κ 2 (A) de la matrice A en utilisant la fonction kappa de R : > k <- kappa(a,exact=true) [1] 5.958987 4
Il faut spécifier l argument exact car autrement cette fonction fait un calcul approché par une méthode simplificatrice. Calculons la variation relative de A. C est la quantité A P =. On utilise la fonction norm de R : > vara <- norm(p,"2")/norm(a,"2") [1] 0.04759615 La variation relative de b est de même la quantité b > ndb <- sqrt(sum(p^2)) [1] 0.1897367 > nb <- sqrt(sum(b^2)) [1] 11.7047 > varb <- ndb/nb [1] 0.0162103 = p. On trouve : On va vérifier l inégalité du cours : x κ(a) 1 κ(a) A ( b + A ) Calculons la constante C = > C <- k/(1-k*vara) κ(a) 1 κ(a) A : [1] 8.318249 Le membre de droite vaut donc : > C*(varb+varA) [1] 0.5307579 qui majore effectivement la variation relative x = 0.2709. 5