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 :

Analyse numérique et représentation graphique


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Points : 11
    Points
    11
    Par défaut Analyse numérique et représentation graphique
    Bonjour,
    je souhaite obtenir de l'aide pour un exercice d'analyse numérique utilisant la method de steffenson. Voici l'énoncé :



    Alors pour les premieres questions voice mes réponses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    g1 = @(x) x^2+x/2; %converge
    g2 = @(x) x^2+x; %converge mais tres tres lentement
    g3 = @(x) x^2 + 3*x; %converge meme si g n'est pas convergente
    g4 = @(x) x^2; %converge
    g5 =@(x) x;
    subplot(2,2,1)
    fplot(g1,[-3 3]);
    hold on
    fplot(g5,[-3 3]);
    [x1,err1] = steffenson(g4, 3 , 25, 1.0e-6);
    hold off
    avec un fichier function donné :

    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
        function  [x, err] = steffenson(g, x0, nmax, epsilon, resul)
    %
    %  Méthode d'accélération de Steffenson pour les points fixes en une variable 
    %  pour résoudre x = g(x)
    %  Programmeur: A. Fortin (2008)
    %  Référence: Analyse numérique pour ingénieurs, A. Fortin,
    %             Presses internationales Polytechnique, 2008
    %             Section 2.3.3
    %
    %
    %  Exemples d'appel:
    %  [x, err] = steffenson('g', 2.0, 10, 1.0e-6)
    %  [x, err] = steffenson('g', 2.0, 10, 1.0e-6, 'resul.dat')
    %
    %  Si vous avec une fonction anonyme (@) (on ne met pas les apostrophes)
    %  [x, err] = steffenson(g_anonyme, 2.0, 10, 1.0e-6)
    %  [x, err] = steffenson(g_anonyme, 2.0, 10, 1.0e-6, 'resul.dat')
    %
    %  Arguments
    %
    %  Entrée:
    %  1) g: Le nom entre apostrophes (' ') du fichier .m contenant la fonction g(x).
    %     comme par exemple  'g' (correspondant a un fichier g.m) 
    %     ou encore le nom de la fonction anonyme comme par exemple 
    %     g_anonyme = @(x) exp(-x);
    %  2) x0: Vous devez fournir un estimé initial.
    %  3) nmax: Vous devez fournir le nombre maximal d'itérations.
    %  4) epsilon: Vous devez fournir le critère d'arrêt.
    %  5) resul: Si vous voulez les résultats dans un fichier, vous devez 
    %     fournir le nom entre apostrophes (' ') de ce fichier.
    %     Exemple: 'resul.dat' qui créera un fichier nommé resul.dat.
    %  Retour:
    %  1) x est un vecteur contenant les différentes itérations.
    %  2) S'il y a convergence, err est le vecteur dont les composantes sont |x_n - r|,
    %     r étant le point fixe trouve. Sinon, err est une matrice vide.
    %
        f = g;
        g=fcnchk(g);
        infini = 0;
        x=zeros(1); gx=zeros(1); errel=zeros(1);
        x(1) = x0;
        gx0 = g(x0);
        if (~isfinite(gx0)),
          error('g(x0) n''est pas un nombre fini.');
        end
        gx(1) = gx0;
        compteur = 0;
       for n=1:nmax,
             x1 = g(x0);
             x2 = g(x1);
             xe = x0 - (x1-x0)^2/(x2-2*x1+x0);
             ind = n-1;
             x0 = xe;
             if (~isfinite(gx0)),
               if (n == 1),
                 fprintf('\r\n Il n''y a pas convergence.\r\n\r\n');
               else
                 fprintf('\r\n Il n''y a pas convergence après %1.0f itérations.\r\n\r\n', ind);
               end
               infini = 1;
               break;
             end
             x(n+1) = x0;
             gx0 = g(x0);
             gx(n+1) = gx0;
             tol = abs(x0 - x(n));
             tolrel = tol/(abs(x0)+eps);
             errel(n) = tolrel;        
             if (tolrel < epsilon),
                break;
             end
        end
        if (tolrel < epsilon),
          err = abs(x - x0);
          converg = 1;
        else
          err = [];
          converg = 0;
          if (infini == 0),
            fprintf('\r\n Il n''y a pas de convergence apres %1.0f iterations.\r\n\r\n', nmax);
          end
        end
        if (nargin > 4),
          steffenson_out(f, resul, x, gx, errel, nmax, epsilon, converg);
        end
        plot(x,x,'g*');
        end
    J'ai rajouté ce code qui me permet d'afficher des points d'itération :

    Donc la ou je bloque c'est que je n'arrive pas a visualiser la figure qui pourrait me permettre de metre en evidence l'ordre de la method. Est-ce que c'est une derive ? Ensuite mes fonctions sont-elle correctes ? Elles convergent toutes sauf g2 qui semble converger mais tres lentement.
    Merci.
    Images attachées Images attachées  

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour,

    plot(x,x,'g*'); plot x en fonction de x, donc tous tes points seront sur la diagonale. plot(x,'g*') me semble plus adapté.

    je n'arrive pas a visualiser la figure
    Comment ca ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par VV33D Voir le message
    Bonjour,

    plot(x,x,'g*'); plot x en fonction de x, donc tous tes points seront sur la diagonale. plot(x,'g*') me semble plus adapté.


    Comment ca ?
    Je comprends pas trop comment representer l'ordre de la methode graphiquement ?

Discussions similaires

  1. [Turbo Pascal] Unité EqParser : Évaluation d'expression algébrique sous forme numérique et représentation graphique
    Par Eric Sigoillot dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 07/04/2014, 10h24
  2. [AC-2002] Représentation graphique d'une valeur numérique
    Par spaiku dans le forum IHM
    Réponses: 2
    Dernier message: 02/02/2012, 14h50
  3. [ODBC] Affichage (représentation) graphique d'une base
    Par Atchoum_002 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 19/09/2005, 15h34
  4. Représentation graphique
    Par libititi dans le forum Composants VCL
    Réponses: 5
    Dernier message: 31/05/2005, 11h05
  5. [conseil logiciel] Représentation graphique d'une BDD
    Par ShinJava dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 27/02/2005, 08h41

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