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 :

Programmation de la méthode du gradient conjugué


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Programmation de la méthode du gradient conjugué
    Bonjour,

    je dois écrire l'algorithme du gradient conjugué, est ce que quelqu'un pourrait me dire si mon programme est juste ?

    le voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function [x, k] = Gradient_conjugue(A, b, x, e)
    k=0;
    e=0;
    x=x0;
    r0=b-A*x0;
    r=r0;
    p0=r0;
    while norm(r)<e*norm(r0)
        f=dot(r,r)/(A*p,p);
        x=x+f*p;
        r=r-f*A*p;
        B=(dot(r,r))^2/(dot(r,r))^2;
        p=r+B*p;
    end



    ou x^0 appartient à R^n, arbitraire, k=0,1,...
    p^0=r^0=b-A*x^0
    f^k=(r^k,r^k)/(A*p^k,p^k)
    x^(k+1)=x^k+f^k*p^k
    r^(k+1)=r^k-f^k*A*p^k
    B^(k+1)= llr^(k+1)ll^2 / llr^kll^2
    p^(k+1) = r^(k+1) + B^(k+1)*p^k

    K(e) est le nb d'itération pour que llr^kll soit inférieur à epsilon(noté e) fois llr^0ll.


    Merci bcp et bonne journée

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Pour faire simple :
    • ceci n'est pas un algorithme
    • la variable p n'est définie (initialisée ?) nulle part
    • la syntaxe (A*p,p) est illégale
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    Citation Envoyé par Dut Voir le message
    • la syntaxe (A*p,p) est illégale
    dot(A*p,p) à la place , mais je ne sais pas si ton code fait bien ce que tu veux.
    AlloSchool, votre école sur internet.

  4. #4
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    Tu ne va jamais passer par ta boucle while :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    e=0;
    %...
    while norm(r)<e*norm(r0))
    ++
    AlloSchool, votre école sur internet.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Vous voulez dire qu'en mettant e=0; ca fait que ma boucle while ne fonctionne pas, c'est ca?

  6. #6
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    euuuh,

    tu comprend au moins le code que t'as posté ?

    e est un argument de ta fonction.... Si tu veux lui donner une valeur par default, il faut utiliser nargin.


    PS :

    pour répondre à ta question :

    Vous voulez dire qu'en mettant e=0; ca fait que ma boucle while ne fonctionne pas, c'est ca?

    un norme est par definition >= 0 . donc la condition de passage est fausse.
    AlloSchool, votre école sur internet.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Merci bcp, je n'y avais pas fait attention du tout.

  8. #8
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut !

    Pour savoir si un programme est correct, on ne se contente pas d'envoyer son listing en tout-ménages. On exécute le programme avec un nombre suffisant de jeux de données et on vérifie que les réponses obtenues coïncident avec la solution exacte connue a priori.

    Comme l'algorithme des gradients conjugués sert à résoudre des systèmes linéaires dont la matrice est symétrique définie positive, c'est assez simple: tu peux par exemple te donner tout un choix de matrices de ce type et les solutions exactes, tu fais les produits et ça te donne les seconds membres. Tu appliques alors ton programmes et tu vérifies l'exactitude de ce qu'il te donne.
    Plus tu obtiendras de solutions correctes, plus il sera plausible que ton programme est correct; su, même une seule fois, la solution est fausse, tu dois en déduire qu'il y a une erreur dans ton programme. Pour plus de détails, voir:
    György Pólya: How to Solve It, Mathematics and Plausible Reasoning.

    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  9. #9
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    Salut,

    J'en rajoute une couche de maths . l'algorithme des gradients conjugués sert plus généralement à résoudre tout probléme d'optimisation convexe.

    ++
    AlloSchool, votre école sur internet.

  10. #10
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut mr_samurai !

    Tu as tout à fait raison: les deux problèmes sont équivalents; c'est pourquoi on utilise les mêmes méthodes pour les résoudre.

    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Bonsoir,
    merci à tous pour vos conseils, j'ai trouvé ce qui n'allait pas, mon problème est donc résolu.
    bonne soirée

  12. #12
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Tu peux nous montrer la solution ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

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

Discussions similaires

  1. Méthode du gradient conjugué accéléré
    Par nisrinege dans le forum Mathématiques
    Réponses: 1
    Dernier message: 17/06/2015, 07h47
  2. Méthode du Gradient Conjugué
    Par Carew dans le forum Mathématiques
    Réponses: 10
    Dernier message: 15/01/2013, 12h51
  3. équation linéaire par la méthode du Gradient conjugué
    Par Seltymar dans le forum Mathématiques
    Réponses: 8
    Dernier message: 28/03/2012, 11h04
  4. Méthode de Gradient Conjugué en C
    Par achraf2 dans le forum Mathématiques
    Réponses: 1
    Dernier message: 19/01/2010, 16h41
  5. Réponses: 17
    Dernier message: 06/02/2008, 19h44

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