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 :

problème dans mon code méthode des descentes


Sujet :

MATLAB

Vue hybride

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 233
    Par défaut problème dans mon code méthode des descentes
    Bonjour,

    J'ai une fonction main4 qui appelle la fonction descente1 dans le but de coder la méthode des descentes. Problème: le résultat est NaN...

    J'ai l'impression que le code ne rentre pas dans la fonction descente1...

    Pourriez-vous m'indiquez pourquoi svp?

    Ci-dessous le code de main4:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    clear all % efface tout en mémoire
    close all %ferme fenêtres graphiques
    clc %efface console
    format long
     
    tstart = tic; %start du temps
     
    x0=[2.2;2.2]; 
    eps=1e-6;
    [X,nb,XX]=descente1(x0,eps)
    plot(XX(1,:),XX(2,:), 'o-')
     
    telapsed = toc(tstart) %stop du temps
    et celui de descente1:

    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
    function [X,nb,XX]=descente1(X0,eps)
    %méthode de Newton
    X=X0;
    XT=X0; 
    XX=[X];
    nb=0; 
    err=1;
    maxiter = 200
    %choix du pas
    alpha=0.1
     
    while (err>eps && nb<maxiter)
            %direction de descente -gradient
            d=-df(X);
            %calcul de x(k+1)
            X=X+alpha*d;
            %calcul de l'erreur
            err=norm(X-XT);
            %iteration
            XT=X;
            %compte nb iteration
            nb=nb+1;
            %complète la matrice
            XX=[XX,X];
    end
    Merci d'avance!

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Bonjour,

    si tu obtiens un résultat, même nan, c'est que le code rentre dans la fonction.

    Que fait la fonction df?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Membre émérite
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Par défaut
    Bonjour,

    Je plussoie le commentaire de Magelan : peux-tu nous montrer la fonction df stp ?

    Un NaN peut venir d'une division par zéro... qui peut se produire lors du calcul d'une dérivée mal codée par exemple...

    Cordialement,

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Citation Envoyé par tachmou Voir le message
    Un NaN peut venir d'une division par zéro...
    Il faut aussi que le numérateur soit nul sinon, matlab renvoie la limite (Inf).
    Citation Envoyé par La doc de NaN
    These operations produce NaN:

    • Any arithmetic operation on a NaN, such as sqrt(NaN)
    • Addition or subtraction, such as magnitude subtraction of infinities as (+Inf)+(-Inf)
    • Multiplication, such as 0*Inf
    • Division, such as 0/0 and Inf/Inf
    • Remainder, such as rem(x,y) where y is zero or x is infinity
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 233
    Par défaut
    Salut tout le monde!

    Merci pour votre aide!

    Voici ci-dessous df, dérivée de ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function [a] = df(X)
    a = zeros(2,1);
    x=X(1,1);
    y=X(2,1);
    a = [-400*x*(y-x.^2)-2*(1-x); 200*(y-x.^2)];
    et d2f, dérivée seconde:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function [a]=d2f(X)
    a=zeros(2,2);
    x=X(1,1);
    y=X(2,1);
    a=[1200*x.^2-400*y+2, -400*x; -400*x, 200];

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    En fait les nan sont obtenus car ton algo diverge : réduit ton pas (valeur de alpha).
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 233
    Par défaut
    Merci tout le monde!

    Ca marche avec un pas de 0.001!

    Par contre, si vous avez testé mon programme, que signifie les points sur la courbe? Que cette méthode n'est pas trop adaptée?

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Citation Envoyé par bilou_12 Voir le message
    Par contre, si vous avez testé mon programme, que signifie les points sur la courbe? Que cette méthode n'est pas trop adaptée?
    Ce sont les valeurs trouvées à chaque itération. Je n'ai pas vu de problèmes particulier, pourquoi dis-tu qu'elle est mal adaptée?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

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

Discussions similaires

  1. Problème dans mon code
    Par mrbou dans le forum ASP
    Réponses: 15
    Dernier message: 01/10/2008, 14h38
  2. Réponses: 3
    Dernier message: 15/03/2008, 15h15
  3. Problème dans mon code
    Par curro dans le forum Débuter
    Réponses: 14
    Dernier message: 29/08/2007, 01h46
  4. Réponses: 2
    Dernier message: 03/05/2007, 09h00
  5. Réponses: 13
    Dernier message: 17/10/2006, 15h35

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