IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Résolution Ax=b : comparaison méthodes Gauss-Seidel, Jacobi et SOR


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Profil pro
    Enseignant
    Inscrit en
    Octobre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6
    Points : 8
    Points
    8
    Par défaut Résolution Ax=b : comparaison méthodes Gauss-Seidel, Jacobi et SOR
    J'ai un problème que je n'arrive pas à résoudre, écrire un programme principal qui appelle 3 fonctions :
    résolution de Ax=b
    la methode de Jacobi
    la methode de Gauss_Seidel
    la methode SOR

    puis comparer les trois méthodes et afficher le resultat : quelle est la meilleure methode.
    J'ai construit le programme mais j'ai pas pu les comparer

    Voici le programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    %Programme principal de comparaison entre 
    % méthodes ithératives: J, Gs, Sor (avec w=w0
    n=input('donner la taille de la matrice');
    A=input('Donner la matrice A : \n');
    b=input('Donner le vecteur b : \n');
    epsilon=input('donner epsilon\n');
    max=input('donner le nombre maximal d iteration\n');
    w=input('donner omega\n')
    %methode jacobi
    disp('debut de jacobi');
    n1=n;A1=A,b1=b;eps=epsilon;max1=max;w1=w;
    [X,k]=fjac(A1,b1,eps,n1,max1)
    disp('fin de jacobi')
    %methode de Gauss_Seidel
    disp('debut de Gauss_Seidel')
    n1=n;A1=A,b1=b;eps=epsilon;max1=max;w1=w;
    [X,k]=fGS(A1,b1,eps,n1,max1)
    disp('fin de Gauss_Seidel');
    %methode de SOR
    disp('debut  SOR ');
    n1=n;A1=A,b1=b;eps=epsilon;max1=max;w1=w;
    [X,k]=fsor(A1,b1,eps,n1,max1,w1)
    disp('fin  SOR ');
    ppor les 3 fonction
    %methode de Gauss_Seidel de resolution de l equation Ax=bfunction [X,k]=fGS(A,b,epsilon,n,max);
    D=diag(diag(A));
    E=-tril(A,-1);
    F=-triu(A,1);
    C=inv(D-E)*b;
    L=inv(D-E)*F;
    x(:,1)=zeros(n,1);
    err=1;
    k2=1;
    while(err>epsilon)&(k<max)
       x(:,k+1)=L*x(:,k)+C;
       err=norm(x(:,k+1)-x(:,k));
       k=k+1;
    end
    x(:,k)
    k
    %methode de jacobi de resolution de l equation Ax=b
    function [X,k]=fjac(A,b,epsilon,n,max);
    D=diag(diag(A));
    N=D-A;
    x(:,1)=zeros(n,1);
    for k=1:max
       x(:,k+1)=inv(D)*(N*x(:,k)+b);
       erreur=norm(x(:,k+1)-x(:,k));
       if erreur<epsilon 
          break
          end
     end     
     x(:,k)
     k
    %methode de SOR de resolution de l equation Ax=b
    function [X,k3]=fsor(A,b,epsilon,n,max,w)
    D=diag(diag(A));
    E=-tril(A,-1);
    F=-triu(A,1);
    C=w*inv(D-w*E)*b;
    L=inv(D-w*E)*F;
    J=[(1-w)*D+w*F];
    L=L*J;
    x(:,1)=zeros(n,1);
    err=1;
    k=1;
    while(err>epsilon)&(k<max)
       x(:,k+1)=L*x(:,k)+C;
       err=norm(x(:,k+1)-x(:,k));
       k=k+1;
    end
    k
    x=x(:,k)

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 901
    Points
    901
    Par défaut
    où est ton problème ?

  3. #3
    Futur Membre du Club
    Profil pro
    Enseignant
    Inscrit en
    Octobre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    mon probleme 'j'arrive pas a recupperer les troix nombres d'iterations de chaque methode pour les comparer et afficher la meilleure methode

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 901
    Points
    901
    Par défaut
    salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    function [X,k3]=fsor(A,b,epsilon,n,max,w)
    doit devenir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    function [X,k]=fsor(A,b,epsilon,n,max,w)
    que renvoie ton prgm ?

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 901
    Points
    901
    Par défaut
    Ton programme contient des erreurs. Corrige-les et dis-nous ensuite où tu en es :

    dans ta fonction fGs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    function [X,k]=fGS(A,b,epsilon,n,max);
    D=diag(diag(A));
    E=-tril(A,-1);
    F=-triu(A,1);
    C=inv(D-E)*b;
    L=inv(D-E)*F;
    x(:,1)=zeros(n,1);
    err=1;
    k2=1;  <-- ici tu ulise k2
    while(err>epsilon)&(k<max)   <-- ici tu utilise k
       x(:,k+1)=L*x(:,k)+C;
       err=norm(x(:,k+1)-x(:,k));
       k=k+1;
    end
    x(:,k)
    k

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    %méthode de Jacobi de résolution de l'équation Ax=b
    function [X,k]=fjac(A,b,epsilon,n,max);
    D=diag(diag(A));
    N=D-A;
    x(:,1)=zeros(n,1);
    for k=1:max
       x(:,k+1)=inv(D)*(N*x(:,k)+b);
       erreur=norm(x(:,k+1)-x(:,k));
       if erreur<epsilon 
          break
          end
     end     
     x(:,k)
     k

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    %méthode de SOR de résolution de l'équation Ax=b
    function [X,k3]=fsor(A,b,epsilon,n,max,w)  <-- ta fonction renvoie k3 (toujours égal à 0 dan ta fonction)
    D=diag(diag(A));
    E=-tril(A,-1);
    F=-triu(A,1);
    C=w*inv(D-w*E)*b;
    L=inv(D-w*E)*F;
    J=[(1-w)*D+w*F];
    L=L*J;
    x(:,1)=zeros(n,1);
    err=1;
    k=1;
    while(err>epsilon)&(k<max)
       x(:,k+1)=L*x(:,k)+C;
       err=norm(x(:,k+1)-x(:,k));
       k=k+1;
    end
    k
    x=x(:,k)

  6. #6
    Futur Membre du Club
    Profil pro
    Enseignant
    Inscrit en
    Octobre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    %methode de Gauss_Seidel de resolution de l equation Ax=b
     
    function [X,k]=fGS(A,b,epsilon,n,max);
    D=diag(diag(A));
    E=-tril(A,-1);
    F=-triu(A,1);
    C=inv(D-E)*b;
    L=inv(D-E)*F;
    x(:,1)=zeros(n,1);
    err=1;
    k=1;
    while(err>epsilon)&(k<max)
       x(:,k+1)=L*x(:,k)+C;
       err=norm(x(:,k+1)-x(:,k));
       k=k+1;
    end
    k
    x(:,k)
    Ce programme marche, il donne des résultats.
    Le probleme, comme j'ai dit, est comment récupérer les nombres k pour les comparer et afficher la meilleure methode
    j'ai indroduit la fonction compare :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    %fonction pour comparer les troix methodes
    [k,m,h]=compare(A,b,epsilon,n,max,w)
    if (k>m)&(k>h)
       fprintf('la methode de jacobi converje plus ')
      else 
       if (m>k)&(m>h)
          fprintf('la methode de Gauss_Seidel converje plus ')
       else
          if (h>k)&(h>m)
             fprintf('la methode de SOR converje plus ')
          end
       end
    end
    dans le programme princile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    disp('debut de compare')
    n1=n;A1=A,b1=b;eps=epsilon;max1=max;w1=w;
    [k,k1,k2]=compare(A1,b1,eps,n1,max1,w1)
    disp('fin de compare')
    mais j'ai encord des erreurs de l'iade si vous plaiez

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Méthode de Gauss-Seidel
    Par Wenneguen dans le forum Mathématiques
    Réponses: 4
    Dernier message: 06/11/2014, 16h08
  2. Méthodes de Gauss-Seidel et de Jacobi
    Par fayendanane dans le forum Mathématiques
    Réponses: 2
    Dernier message: 16/06/2014, 11h22
  3. Gauss, Jacobi et Gauss-Seidel
    Par JonasB dans le forum MATLAB
    Réponses: 11
    Dernier message: 07/03/2009, 19h45
  4. decomposition LU, gauss-seidel, implementation lorsqu il y a des 0 sur la diagonale
    Par le_voisin dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 09/09/2006, 00h12
  5. [maths] Méthode de Gauss-Seidel
    Par al85 dans le forum Mathématiques
    Réponses: 5
    Dernier message: 20/05/2006, 21h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo