TP9_Gauss

4
PCSI 803 Lycée Déodat de Séverac Année 2013 - 2014 Toulouse TP n o 9 : Résolution de systèmes linéaires – Pivot de Gauss Buts du TP • Implémenter et étudier la méthode du pivot de Gauss en Python • Utiliser les fonctions ad hoc en Python et Scilab Dans ce TP, on s’intéresse à la résolution des systèmes linéaires d’équations de la forme : (S ) : AX = B, où : A ∈M n (K) est donnée B ∈M n,1 (K) est donnée X ∈M n,1 (K) est l’inconnue. 1 Matrices en Python En Python, une matrice est simplement une liste de listes (c’est la liste de ses vecteurs-lignes). La matrice M = 3 6 7 1 2 5 6 2 3 1 4 2 sera par exemple codée sous la forme : >>> ligne1=[3,6,7,1] >>> ligne2=[2,5,6,2] >>> ligne3=[3,1,4,2] >>> M=[ligne1,ligne2,ligne3] >>> M [[3, 6, 7, 1], [2, 5, 6, 2], [3, 1, 4, 2]] >>> M[1][2] #expliquer le résultat 6 Ainsi, on pourra donc utiliser tout ce que l’on connaît sur les listes afin de travailler au mieux avec les matrices. Par exemple, Exercice 1. Écrire en Python une fonction taille(M) qui prend en entrée une matrice M et qui renvoie sa taille (m, n), où m est le nombre de lignes de M et n son nombre de colonnes. La tester sur la matrice M précédente. 1

description

Méthode de Gauss

Transcript of TP9_Gauss

  • PCSI 803 Lyce Dodat de SveracAnne 2013 - 2014 Toulouse

    TP no 9 : Rsolution de systmes linaires Pivot de Gauss

    Buts du TP

    Implmenter et tudier la mthode du pivot de Gauss en Python

    Utiliser les fonctions ad hoc en Python et Scilab

    Dans ce TP, on sintresse la rsolution des systmes linaires dquations de la forme :

    (S) : AX = B,

    o :

    A Mn(K) est donne B Mn,1(K) est donne X Mn,1(K) est linconnue.

    1 Matrices en Python

    En Python, une matrice est simplement une liste de listes (cest la liste de ses vecteurs-lignes).

    La matrice M =

    3 6 7 1

    2 5 6 2

    3 1 4 2

    sera par exemple code sous la forme :>>> ligne1=[3,6,7,1]>>> ligne2=[2,5,6,2]>>> ligne3=[3,1,4,2]>>> M=[ligne1,ligne2,ligne3]>>> M[[3, 6, 7, 1], [2, 5, 6, 2], [3, 1, 4, 2]]>>> M[1][2] #expliquer le rsultat6

    Ainsi, on pourra donc utiliser tout ce que lon connat sur les listes afin de travailler au mieux avecles matrices. Par exemple,

    Exercice 1. crire en Python une fonction taille(M) qui prend en entre une matrice M et quirenvoie sa taille (m,n), o m est le nombre de lignes de M et n son nombre de colonnes.La tester sur la matrice M prcdente.

    1

  • Exercice 2. Comment crer le plus simplement possible en Python la matrice M suivante ?

    M =

    1 2 3 . . . 10

    11 12 13 . . . 20

    21 22 23 . . . 30

    Exercice 3. crire une fonction echange(M,i,j) qui change les lignes Li et Lj de la matrice M(la fonction echange ne renvoie rien : elle modifie en place la matrice M donne en argument).

    Exercice 4. crire une fonction transvection(M,i,j,x) qui remplace la ligne Lj de la matriceM par la ligne Lj xLi.

    2 Pivot de Gauss

    On rappelle le principe de la mthode du pivot de Gauss pour la rsolution dun systme dquationsdu type (S), que lon supposera de Cramer (il existe une et une seule solution (S) ) : On utilise la matrice augmente M = A | b On commence par mettre le systme sous forme triangulaire :

    Algorithme (Mise sous forme triangulaire).Entre(s): une matriceM Mn,n+1(K) pour laquelle on suppose que les pivots qui apparaissentsont tous non nuls

    Sortie(s): la matrice M mise sous forme triangulaire (du moins sa partie non augmente...)

    Pour i de 1 jusqu n FairePour k de i+ 1 n 1 Faire

    Lk Lk ak,iai,i LiFin Pour

    Fin Pour On effectue la mthode de la remonte :

    On suppose que lon a obtenu un systme de Cramer triangulaire suprieur de la forme :11x1 + 12x2 + + 1nxn = 1

    22x2 + + 2nxn = 2...

    nnxn = n

    .

    Lunique solution est donne par :xn =

    nnn

    i Jn 1, 1K, xi = 1ii

    (i

    nj=i+1

    ijxj

    )

    2

  • Exercice 5. Coder la mthode du pivot de Gauss dcrite ci-dessus.

    Exercice 6. La tester avec le systme suivant :`x+ 3y + 2z = 7

    2x+ y + 4z = 8

    x+ 2y + 3z = 0.1,

    o ` = 1016.Rsoudre ce systme la main : que sest-il pass ?

    Exercice 7. Pour viter cet cueil, on choisit ltape i le pivot de module maximal dans la colonnei partir de la ligne i. crire une version modifie de la mthode du pivot de Gauss prenant encompte cette amlioration. La tester avec le systme prcdent.

    Indication : on pourra fabriquer une fonction pivotmax(A,i) qui prend en arguments une matriceA et un indice i, et retourne lindice de la ligne du pivot maximal (en module) de la colonne i surles lignes i et suivantes.

    Cette mthode est alors appele algorithme du pivot de Gauss avec recherche du pivot partiel.

    3 Et en Python ?

    numpy dispose dune fonction solve dans la bibliothque numpy.linalg pour rsoudre les systmeslinaires. On lutilise de la manire suivante :

    >>> from numpy.linalg import solve>>> solve([[10**(-16),3,2],[2,1,4],[-1,2,3]],[[7],[8],[0.1]])array([[ 3.7 ],

    [ 2.68],[-0.52]])

    4 Et en Scilab ?

    On crira en Scilab par exemple :

    -->A = [10^(-16) 3 2;2 1 4;-1 2 3]A =

    1.000D-16 3. 2.2. 1. 4.

    - 1. 2. 3.

    --> B = [7;8;0.1]B =

    3

  • 7.8.0.1

    -->A\Bans =

    3.72.68

    - 0.52

    5 Complexit

    Exercice 8. valuer la complexit de lalgorithme du pivot de Gauss avec recherche de pivot partiel.

    Exercice 9. On considre les matrices Mn suivantes :

    Mn =

    2 1 (0)1 2 1

    . . . . . . . . .

    1 2 1(0) 1 2

    Coder une fonction M(n) qui renvoie la matrice correspondante de taille n.

    Exercice 10. En chronomtrant le temps ncessaire pour rsoudre MnX = t(1, . . . , 1) pour n {50, 100, 200, 400}, valider (ou invalider) le calcul de la complexit effectu auparavant.

    Lillustrer graphiquement.

    Comparer avec les commandes ad hoc en Python ou en Scilab.

    4