PROGRAMMATION SCIENTIFIQUE EN C PRO-1027 Résolution de système d’équations linéaires (méthodes itératives) Introduction Méthode de Jacobi Méthode de Gauss-Seidel Considérations sur la convergence Travail pratique 1 c – Utilisez le fichier de données tp1c_data au lieu du fichier tp1b_data Examen 1 (11 février 1999) Introduction Les méthodes d’élimination sont des méthodes de résolution directes puisque le nombre d’opérations est connu Nous pouvons cependant résoudre un système d’équations linéaires par une procédure d’essai et erreur Cette procédure suppose une solution de départ qui représente une estimation des valeurs des inconnus Introduction De façon itérative, les estimées de la solution sont rafinées jusqu’à ce qu’un critère d’arrêt soit atteint Les avantages des méthodes itératives sont d’être plus rapides que les méthodes directes et qu’elles peuvent être utilisées pour résoudre des systèmes non-linéaires La méthode de Jacobi Par la méthode de Jacobi nous pouvons isoler chaque inconnu Xi de la façon suivante X 1k 1 C1 (a12 X 2k a13 X 3k a1n X nk ) a11 X 2k 1 C2 (a21 X 1k a23 X 3k a2 n X nk ) a22 X nk 1 Cn (an1 X 1k an 2 X 2k ann1 X nk1 ) ann La méthode de Jacobi Algorithme de Jacobi (une itération) Jacobi(int dim,float **a, float *c, float *x, float *y) /* x contient l’estimation actuelle de la solution y contient la nouvelle estimation de la solution */ POUR i allant de 1 à dim FAIRE y[i] = c[i] POUR j allant de 1 à dim FAIRE SI j != i ALORS y[i] = y[i]- a[i,j] * x[j] FIN SI FIN POUR y[i] = y[i]/ a[i,i] FIN POUR La méthode de Jacobi Algorithme de Jacobi (général) JacobiG(int dim, float **a, flaot *c) assignation du vecteur x initial et y aux mêmes valeurs erreur = MAXFLOAT TANT QUE erreur > eps FAIRE POUR i allant de 1 à dim FAIRE x[i]=y[i] FINTANTQUE Jacobi(dim, a,c,x,y) /* Gauss-Seidel() */ erreurmax = 0 POUR i allant de 1 à dim FAIRE /* Calcul de l ’erreur */ erreur = | y[i]- x[i] | SI erreur > erreurmax ALORS erreurmax = erreur FINSI FIN POUR erreur = erreurmax FINTANTQUE imprimer le vecteur y La méthode de Gauss-Seidel Pour accélérer le taux de convergence pourquoi ne pas insérer les nouvelles estimations dans les équations suivantes pour donner X 1k 1 C1 (a12 X 2k a13 X 3k a1n X nk ) a11 X 2k 1 C2 (a21 X 1k 1 a23 X 3k a2 n X nk ) a22 X nk 1 Cn (an1 X 1k 1 an 2 X 2k 1 ann1 X nk11 ) ann La méthode de Gauss-Seidel Algorithme de Gauss-Seidel (une itération) GaussSeidel(int dim,float **a, float *c, float *x, float *y) /* x contient l’estimation actuelle de la solution y contient la nouvelle estimation de la solution */ POUR i allant de 1 à dim FAIRE y[i] = c[i] POUR j allant de 1 à i-1 FAIRE y[i] = y[i]- a[i,j] * y[j] FIN POUR POUR j allant de i+1 à dim FAIRE y[i] = y[i]- a[i,j] * x[j] FIN POUR y[i] = y[i]/ a[i,i] FIN POUR Considérations sur la convergence Pour que les méthodes de Jacobi et Gauss-Seidel convergent il faut que la condition suivante soit respectée N aii aij j 1 j i i 1,2, , N Considérations sur la convergence Quand cette condition est vraie, les algorithmes itératifs convergent vers la solution indépendamment du choix du vecteur solution x1 initial Une matrice des coefficients qui possède cette propriété est appelée matrice à diagonale dominante Lorsque la matrice a ne respecte pas cette condition nous pouvons permuter des rangées de façon à respecter cette condition Considérations sur la convergence Si nous avons un système de 2 inconnus de la forme a11 X 1 a12 X 2 C1 a21 X 1 a22 X 2 C2 Nous pouvons isoler les inconnus X 1k 1 X k 1 2 C1 a12 X 2k a11 C2 a21 X 1k 1 a22 Considérations sur la convergence Exemple graphique (Cas convergent) Considérations sur la convergence Exemple graphique (Cas divergent) Travail pratique 1 c Le système d’équations contenu dans le fichier tp1b_data ne possède pas une matrice des coefficients à diagonale dominante Même après permutation de rangées le système ne converge toujours pas Utilisez alors le système d’équations qui est dans le fichier tp1c_data Ce système possède une matrice a à diagonale dominante Examen 1 Les erreurs sur les calculs par ordinateur – Comprendre le concept du epsilon de la machine – Comprendre les sources d’erreurs (représentation, propagation des erreurs) Résolution de système d’équations linéaires – Comprendre l’algorithme d’élimination de Gauss – Voir comment pourrait être améliorer l’efficacité de l’algorithme dans le cas où nous savons que la matrice des coefficients a est symétrique Examen 1 Résolution de système d’équations linéaires – Système avec une matrice a symétrique a11 a 21 an1 a12 a22 an 2 aij a ji a1n C1 a2 n C2 ann Cn Examen 1 Résolution de système d’équations linéaires (méthodes itératives) – Comprendre le fonctionnement de l’algorithme de Gauss-Seidel – Voir comment l’efficacité de cet algorithme pourrait être améliorée sachant que la matrice des coefficients a est tridiagonale Examen 1 Résolution de système d’équations linéaires (méthodes itératives) – Système d’équations avec une matrice a 0 0 0 tridiagonale a11 a12 a 21 0 0 0 a22 a23 0 0 a32 0 a33 a43 a34 a44 0 a45 0 0 a54 a55 aij 0 i 1,2,...., n j i 1, i, i 1 1 j n C1 C2 C3 C4 C5 Un peu de C Lecture de données à partir du clavier float valeur; printf(`` \n Introduisez un nombre en simple precision:``); scanf(``%f``,&valeur); Mise à la puissance d’un nombre float res; int i; i=10; res = (float)(pow(2.0,(double)(i)));