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 :

Comment corriger ce code?


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Par défaut Comment corriger ce code?
    J'ai besoin de faire une fonction qui permet d'appliquer la méthode de dichotomie afin de rechercher
    la racine approchée d'une fonction non linéaire.J'ai écrit le code suivant mais il y a des erreurs.Qu'est ce que
    je dois rectifier?

    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
    function [r, fr, compt]=Dichotomie(x, f, e, Nmax,a,b)
    compt=1;
    pas=0.01;
    a(1)=a;
    b(1)=b;
    x0(1)=(a+b)/2;
    dist=2*e;
    while ((compt<Nmax) && ( dist>e ))
        u=f((a(compt)-a)/pas+1);
        v=f((x0(compt)-a)/pas+1);
        if(u.*v<0)
            b(compt+1)=x0(compt); a(compt+1)= a(compt);
        end
        if(u.*v>0)
            a(compt+1)=x0(compt); b(compt+1)=b(compt);
        end
        if(u.*v==0)
            dist=0;
        end
        compt=compt+1;
        x0(compt)=(a(compt)+b(compt))/2;
            dist=abs(x0(compt)-x0(compt-1)); 
    end
    r=x0(compt) ;
    fr=dist;
    fprintf('La racine de l''équation est: %f obtenue aprés %f itérations\n ',r,compt);

  2. #2
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Comme on est dimanche et que je n'ai pas le courage d'essayer de faire tourner ton code, peux-tu nous dire quel est le message d'erreur et à quelle ligne il correspond ?
    Et aussi de quel type et quelle taille sont les entrées de ta fonction ?
    Un exemple de ces entrées serait aussi le bienvenu.

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Par défaut
    Voici les erreurs qui apparaissent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ??? Input argument "a" is undefined.
     
    Error in ==> Dichotomie at 4
    a(1)=a;

  4. #4
    Membre chevronné
    Avatar de Dam2227
    Inscrit en
    Juin 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2007
    Messages : 343
    Par défaut
    Je crois que le message d'erreur est assez clair. Matlab ne reconnait pas la variable a. Es-tu sûr de l'avoir bien définie auparavant et de la passer correctement en argument dans ta fonction?

  5. #5
    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
    Salut,

    Essayes ceci :

    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
     
    function [r, fr, compt]=Dichotomie(f, a, b, e, Nmax)
    % [r, fr, compt]=Dichotomie(f, a, b, e, Nmax)
    % Dichotomie function
     
    if nargin < 5
        Nmax = 100;
    end
     
    if nargin < 4 
        e = 1.0e-8; % standard 
    end
     
    if nargin < 3 
       error('Nombre d''arguments insuffisant!') 
    end
     
    if f(a)*f(b) > 0 
       error('Condition : f(a)*f(b) < 0 insatisfaite!!') 
    end
     
    if a >= b 
       error('Condition : a < b insatisfaite!!') 
    end
     
    compt=1;
    fr = 2*e;
     
    % Boucle principale
    while compt < Nmax && fr > e
     
        if  f(a) == 0
            r = a;
            fr = b-a;
            break
        elseif f(b) == 0
            r = b;
            fr = b-a;
            break
        elseif f(a)*f((a+b)/2) <= 0
            b = (a+b)/2;
        else
            a = (a+b)/2;
        end
        r = (a+b)/2;
        fr = b-a;
        compt=compt+1;
    end
     
    fprintf('La racine de l''équation est: %f obtenue aprés %f itérations\n ',r,compt);
    ++

  6. #6
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Par défaut problème de dichotomie
    J'ai besoin de rechercher la racine d'une équation par la méthode de dichotomie.Cette équation est f(x)=x-e.sin(x) =0, x dans [1,10].
    Pour créer cette fonction et la traiter j'ai utilisé ce code du fichier test.m:

    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
    clear all;
    close all;
    clc;
    pas=0.01;
    % On définit la précision de la longueur de l'intervalle dans lequel on désire avoir la solution 
    e=10^(-3);
    % On définit un nombre d'itérations maximal aprés lequel le traitment sera interrompu quelque soit le cas.  
    Nmax=100;
    % On définit les bornes de l'intervalle 
    a=1;
    b=10;
    % On définit la variable de la fonction
     x1=1:pas:10;
     % On définit la fonction
     L=length(x);
    for i=1:L
        f1(i)=x(i)-exp(1)*sin(x(i));
    end
     
    % On visualise la fonction
    figure(1),plot(x,f)
    % On définit r: la solution estimée,fr son image par la fonction f1,compt: le nbre d'itérations
    [r, fr, compt]=Dichotomie(x, f, e, Nmax,a,b);
     
    % Fin du code
    Voici le code de la fonction de dichotomie du fichier Dichotomie.m:

    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
    function [r, fr, compt]=Dichotomie( f, e, Nmax,a,b)
    compt=1;
    pas=0.01;
    a(1)=a;
    b(1)=b;
    x0(1)=(a+b)/2;
    % On initialise un detecteur de précision >e
    dist=2*e;
     
    while ((compt<Nmax) && ( dist>e ))
        u=f((a(compt)-a)/pas+1);
        v=f((x0(compt)-a)/pas+1);
        if(u.*v<0)
            b(compt+1)=x0(compt); a(compt+1)= a(compt);
        end
        if(u.*v>0)
            a(compt+1)=x0(compt); b(compt+1)=b(compt);
        end
        if(u.*v==0)
            dist=0;
        end
        compt=compt+1;
        x0(compt)=(a(compt)+b(compt))/2;
            dist=abs(x0(compt)-x0(compt-1)); 
    end
    r=x0(compt) ;
    fr=x0(compt)-exp(1)*sin(x0(compt));
    Voici la reponse de MATLAB:

    ??? Subscript indices must either be real positive integers or logicals.

    Error in ==> Dichotomie at 12
    v=f((x0(compt)-a)/pas+1);

    Error in ==> test at 23
    [r, fr, compt]=Dichotomie(f, e, Nmax,a,b);

  7. #7
    Membre expérimenté Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ??? Subscript indices must either be real positive integers or logicals.
     
    Error in ==> Dichotomie at 12
    v=f((x0(compt)-a)/pas+1);
    Le message te dis texto qu'un indice doit être strictement positif et entier ou logique.

    Dans l'expression incriminé l'indice est : (x0(compt)-a)/pas+1

    Donc je pencherai plutôt pour dire que (x0(compt)-a)/pas ne doit pas être entier.

  8. #8
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458

Discussions similaires

  1. Réponses: 8
    Dernier message: 16/01/2007, 11h06
  2. [Hardware portable] Comment entrer un code Ascii?
    Par l.sage dans le forum Ordinateurs
    Réponses: 13
    Dernier message: 11/08/2005, 13h04
  3. [Juridique] Comment réutiliser le code source d'une classe ?
    Par mathieu dans le forum Général Java
    Réponses: 8
    Dernier message: 17/05/2004, 13h40
  4. [VB.NET] Comment ecrire du code entre <title>
    Par ykane dans le forum ASP.NET
    Réponses: 5
    Dernier message: 10/05/2004, 16h58
  5. [debutant] comment appliquer le code d'un bouton
    Par philippejuju dans le forum MFC
    Réponses: 3
    Dernier message: 20/01/2004, 10h56

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