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 :

méthode des trapèzes


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2010
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti

    Informations forums :
    Inscription : Décembre 2010
    Messages : 86
    Points : 30
    Points
    30
    Par défaut méthode des trapèzes
    Bonjour, je ne comprends pas , après maintes vérifications, pourquoi les 2 programmes suivants ne donnent pas, par la méthodes trapèzes le même résultat (environ 450) pour le calcul de l'intégrale de -10 à 8 de x-> x^2+ 2*x -1.

    La première façon donne 453 si je me rappelle et la deuxième en faisant : I=trapez_n('f',-10,8,18) en mode interactif, on obtient 3224,5. Je ne vois pas pourquoi après recherche des fautes. Merci de votre aide. Amicalement.

    (J'ai choisi 18 comme dernier argument de trapez_n afin de retrouver h=1).

    1ère façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function I=trapez_v(g,h)
    I=(sum(f)-(f(1)+f(length(f)))/2)*h;
    suivi en mode interactif dans MATLAB(mode commande) des lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>x=-10:1:8;
    >>f=x.^2+2*x-1;
    >>h=1;


    2ème façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function I=trapez_n(fonction_f,a,b,n)
    h=(b-a)/n;
    x=a+(0:n)*h;
    f=feval(fonction_f,x);
    I=trapez_v(f,h)

  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
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    tout d'abord, le code de trapez_v est faux : tu définis g comme variable d'entrée et tu utilises f ensuite...

    Je n'ai pas compris ton problème, en faisant des corrections (de syntaxe, je n'ai pas touché aux calculs), je trouve le même résultat avec les 2 méthodes.

    Pourrais-tu expliquer plus clairement les 2 méthodes en donnant les codes exacts de ce que tu exécutes?
    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
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2010
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti

    Informations forums :
    Inscription : Décembre 2010
    Messages : 86
    Points : 30
    Points
    30
    Par défaut même résultat
    En fait, il n'y a quasiment aucune différence entre les 2. Pouvez-vous m'expliquer comment vous faîtes, avec les petites modifications, pour obtenir le même résultat ?

    1ère méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function I=trapez_v(g,h)
    I=(sum(f)-(f(1)+f(length(f)))/2)*h;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>x=-10:1:8;
    >>f=x.^2+2*x-1;
    >>h=1;
     
    >I=trapez_v(f,h)


    2ème méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function I=trapez_n(fonction_f,a,b,n)
    h=(b-a)/n;
    x=a+(0:n)*h;
    f=feval(fonction_f,x);
    I=trapez_v(f,h)

  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
    Points : 7 614
    Points
    7 614
    Par défaut
    Je te l'ai déjà dit, ton premier code est faux :
    Citation Envoyé par magelan
    tout d'abord, le code de trapez_v est faux : tu définis g comme variable d'entrée et tu utilises f ensuite...
    Il suffit de remplacer g par f.

    Ta deuxième méthode, tu as dit que tu appelais ta fonction ainsi :
    I=trapez_n('f',-10,8,18)
    Tu dois recevoir une erreur car feval attends une fonction, non un caractère.

    En clair, le code que tu nous montres ne fonctionne pas, comment as-tu pu obtenir des résultats? Montres nous les codes que tu as réellement utilisés.
    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
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2010
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti

    Informations forums :
    Inscription : Décembre 2010
    Messages : 86
    Points : 30
    Points
    30
    Par défaut résultats différents
    Vous avez raison, c'est f pas g

    C'est quasiment la même manière de faire en fait, dans les 2 méthodes. Mais avec ces lignes de programme, je ne trouve pas le même résultat

    Voici les codes tels que je les ai utilisés :

    1ère façon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function I=trapez_v(f,h)
    f
    I=(sum(f)-(f(1)+f(length(f)))/2)*h;
    2ème façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function I=trapez_n(fonction_f,a,b,n)
    h=(b-a)/n;
    x=a+(0:n)*h;
    f=feval(fonction_f,x);
    I=trapez_v(f,h);

  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
    Points : 7 614
    Points
    7 614
    Par défaut
    J'ai bien compris que ces 2 codes se ressemblent, mais tant que tu ne nous donnes pas tout les éléments, ça ne fera pas avancer le schmilblik...

    Pour la 2eme méthode comment appelles-tu la fonction trapez_n? (car le résultat dépend de cet appel)
    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
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2010
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti

    Informations forums :
    Inscription : Décembre 2010
    Messages : 86
    Points : 30
    Points
    30
    Par défaut suite
    Pour la première méthode :

    j'ai ajouté en mode interactif :

    en plus du code, j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    x=-10:1:8;
    f=x.^2+2*x-1;
    h=1;
    I=trapez_v(f,h)


    Pour la deuxième méthode :

    j'ai ajouté en mode interactif :

    en plus du code, j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x=-10:1:8;
    f=x.^2+2*x-1;
    I=trapez_n('f',-10,8,18)
    Pourquoi ça fait 2 résultats différents ? J'ai choisi 18=n pour avoir h=1 comme dans la première méthode.

  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
    Points : 7 614
    Points
    7 614
    Par défaut
    Et tu n'as pas de message d'erreur avec ta 2eme méhode? C'est très très étonnant...

    Tu peux faire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    f = inline('x.^2+2*x-1');
    I=trapez_n(f,-10,8,18)
    et on obtient bien 453.
    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.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2010
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti

    Informations forums :
    Inscription : Décembre 2010
    Messages : 86
    Points : 30
    Points
    30
    Par défaut suite
    J'ai compris mon erreur je crois que c'est que lorsque je définis ma fonction avec inline , j'avais fait x^2 et pas x.^2

    Qu'en penses-tu ?

  10. #10
    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
    Points : 7 614
    Points
    7 614
    Par défaut
    Euh... Tu n'as pas utilisé inline dans le code que tu as montré et tu as utilisé x.^2
    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.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2010
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti

    Informations forums :
    Inscription : Décembre 2010
    Messages : 86
    Points : 30
    Points
    30
    Par défaut suite
    En effet, je n'avais pas mis inline. Là je l'ai mis et ça va.

    Mais pourquoi doit-on utiliser inline ?

    La lignen'est-elle pas suffisante ?

  12. #12
    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
    Points : 7 614
    Points
    7 614
    Par défaut
    Si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x=-10:1:8;
    f=x.^2+2*x-1;
    f n'est pas définis comme étant une fonction mais un tableau contenant les valeurs numériques correspondant à x.^2+2*x-1 pour les valeurs de x comprises entre -10 et 8.

    Dans ton code, tu fais :
    le premier argument doit être une fonction, et non un tableau :
    Citation Envoyé par la doc de matlab
    FEVAL(F,x1,...,xn) evaluates the function specified by a function
    handle or function name
    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.

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2010
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti

    Informations forums :
    Inscription : Décembre 2010
    Messages : 86
    Points : 30
    Points
    30
    Par défaut merci
    Merci Magelan, tu es très sympathique.

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

Discussions similaires

  1. Méthode des trapèzes
    Par thenoob123456789 dans le forum Général Python
    Réponses: 11
    Dernier message: 14/04/2015, 16h01
  2. Problème méthode des trapèzes en C++ pour débutant
    Par Andromedae dans le forum Débuter
    Réponses: 18
    Dernier message: 14/11/2014, 10h33
  3. double intégrale par la méthode des trapèzes
    Par sergy01 dans le forum MATLAB
    Réponses: 28
    Dernier message: 26/06/2012, 17h05
  4. Méthode des trapèzes
    Par solo12 dans le forum Fortran
    Réponses: 6
    Dernier message: 11/06/2011, 08h18
  5. méthode des trapèzes
    Par suzanne1307 dans le forum Fortran
    Réponses: 3
    Dernier message: 15/03/2010, 15h12

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