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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    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 317
    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 317
    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

  3. #3
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    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.

  4. #4
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    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))
    ++

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

    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    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 émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    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.

+ 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