Tracer une courbe en C++ ??
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Tracer une courbe en C++ ??



  1. #1
    andreuxyoupi

    Tracer une courbe en C++ ??


    ------

    Bonjour,

    Etudiant en physique, on me demande de tracer la fonction

    f(x_point) = -alpha*x_point - bêta*exp(-x_point/Vf)

    (pardon pour la mise en page, j'ai eu du mal)
    où alpha et β sont positifs, Vf aussi (pas besoin de connaître la signification physique de ces objets pour tracer).

    J'ai entré le programme suivant :

    Code:
    #include <iostream>
    #include <string>
    #include <stdio.h>
    #include <fstream>
    #include <math.h>
    #include <cstdlib>
    using namespace std;
    double f(double x_point){
        double a;
        double b;
        double v;
        double s;
        s=-a*x_point - b*exp(- x_point/v);
        return s;
    }
    
    int main (void){
        double a=4;
        double b=3;
        double v=2;
        double x_point;
        double f_x=f(x_point);
        int i;
        ofstream TP_4("TP_4.res");
      for (i=1;i<10000;i++){
          x_point=x_point+0.001;
          cout << f_x << endl;
          TP_4 << x_point << " " << f_x << endl;
      }
        TP_4.close();
        
        return 0;
    }

    Le problème, c'est que f(x) (ou f(x_point)) ne donne pas les valeurs attendues, j'ai toujours -4.94066e-324.
    Et pour tracer, une fois dans gnuplot, quelle commande utiliser (à partir de ce script) ?

    Un grand merci à ceux/celles qui répondront...

    -----
    Dernière modification par Jack ; 12/10/2014 à 14h48. Motif: Ajout balises CODE

  2. #2
    bisou10

    Re : Tracer une courbe en C++ ??

    - x ca correspond en C à -1*x

  3. #3
    Jack
    Modérateur

    Re : Tracer une courbe en C++ ??

    pardon pour la mise en page, j'ai eu du mal
    Il suffit d'utiliser les balises CODE comme c'est indiqué dans les sujets épinglés en tête de ce forum info.
    j'ai toujours -4.94066e-324.
    Le problème vient de la fonction qui utilisent des variables a, b et v LOCALES à cette fonction. Ces variables du coup n'ont pas de valeur initiales. Si tu veux passer les valeurs de a, b et v définis dans la fonction main à la fonction f, il faut les passer comme paramètre de f.

    Bref, ce n'est pas parce que des variables ont le même nom qu'elles ont les mêmes valeurs. a dans la fonction main n'est pas la même variable que a dans la fonction f.

  4. #4
    andreuxyoupi

    Re : Tracer une courbe en C++ ??

    Citation Envoyé par Jack Voir le message
    Il suffit d'utiliser les balises CODE comme c'est indiqué dans les sujets épinglés en tête de ce forum info.
    Mille excuses.

    Citation Envoyé par Jack Voir le message
    Le problème vient de la fonction qui utilisent des variables a, b et v LOCALES à cette fonction. Ces variables du coup n'ont pas de valeur initiales. Si tu veux passer les valeurs de a, b et v définis dans la fonction main à la fonction f, il faut les passer comme paramètre de f.

    Bref, ce n'est pas parce que des variables ont le même nom qu'elles ont les mêmes valeurs. a dans la fonction main n'est pas la même variable que a dans la fonction f.
    Ca j'avais bien compris, c'est pour cette raison que j'ai réécrit
    Code:
     
        double a=4;
        double b=3;
        double v=2;
        double x_point;
    dans le int main, parce que ces variables sont localement définies quand on les introduit lors de la définition de f(x_point).

    (Et pour le -x, c'est valable aussi en c++ ?)

  5. A voir en vidéo sur Futura
  6. #5
    jibe74

    Re : Tracer une courbe en C++ ??

    Salut,

    Citation Envoyé par andreuxyoupi Voir le message
    Ca j'avais bien compris
    Ben non ! De toute évidence, tu n'as pas compris ce qu'est une variable locale, une variable globale, un paramètre...

    Je pense que le mieux serait de (re)lire un bon cours de langage C, par exemple celui-ci. Regarde attentivement le paragraphe sur la visibilité des variables...

  7. #6
    andreuxyoupi

    Re : Tracer une courbe en C++ ??

    La variable est locale dans la mesure où elle n'existe pas en dehors de la procédure de définition de f. C'est pourquoi je déclare plus loin des nombres a,b,v et x_point. Je lis la même chose sur le lien que vous avez posté.

    Mais je me suis rendu compte que j'avais mal lu une partie du post de Jack. J'ai apporté les corrections suivantes :

    Code:
    #include <iostream>
    #include <string>
    #include <stdio.h>
    #include <fstream>
    #include <math.h>
    #include <cstdlib>
    using namespace std;
    double f(double x_point, double a, double b, double v){
        double s;
        s=-1*a*x_point - b*exp(-1*x_point/v);
        return s;
    }
    
    int main (void){
        double a=4;
        double b=3;
        double v=2;
        double x_point;
        double f_x=f(x_point,a,b,v);
        int i;
        ofstream TP_4("TP_4.res");
      for (i=1;i<10000;i++){
          x_point=x_point+0.001;
          cout << f_x << endl;
          TP_4 << x_point << " " << f_x << endl;
      }
        TP_4.close();
        
        return 0;
    }
    ... mais j'obtiens toujours f(x_point) = -3 maintenant...
    Dernière modification par andreuxyoupi ; 12/10/2014 à 18h25.

  8. #7
    Jack
    Modérateur

    Re : Tracer une courbe en C++ ??

    double f_x=f(x_point,a,b,v);
    Il y a un problème avec cette ligne, puisque x_point ne possède aucune valeur définie au moment de l'appel de la fonction f.

    D'autre part, "s=-1*a" peut très bien être remplacé par "s=-a"
    Dernière modification par Jack ; 12/10/2014 à 18h29.

  9. #8
    bisou10

    Re : Tracer une courbe en C++ ??

    non, mais il faut que tu reevalues ta fonction à CHAQUE passage dans ta boucle...!!!!

  10. #9
    jibe74

    Re : Tracer une courbe en C++ ??

    Effectivement, ce n'est jamais simple de débugger à l'écran le code d'un autre, surtout quand (j'insiste !) des notions sont mal comprises !

    - Utilisation de variables locales en lieu et place de paramètres (maintenant corrigé)
    - Non initialisation d'une variable avant son utilisation (à corriger)
    - appel de fonction en dehors de la boucle de calcul (à corriger)

    Appeler une fonction avec un paramètre non initialisé ne peut que donner un résultat aléatoire, et d'autre part n'appeler la fonction qu'une fois au départ ne permet pas d'obtenir des résultats différents à chaque boucle...

    Il n'y a aucune honte à être un débutant : on est tous passés par là ! Le tout est simplement de connaître ses limites et ses lacunes plutôt que de vouloir ou croire avoir raison

  11. #10
    andreuxyoupi

    Re : Tracer une courbe en C++ ??

    Désolé pour le retard.
    J'ai finalement réussi à tracer ma courbe, merci à tous pour votre aide précieuse !
    Il n'y a aucune honte à être un débutant : on est tous passés par là ! Le tout est simplement de connaître ses limites et ses lacunes plutôt que de vouloir ou croire avoir raison
    Je reconnais être un débutant, je n'en absolument pas honte, mais il y a aussi des choses que je sais (comme ce qu'est une variable globale/locale).

Discussions similaires

  1. Tracer une courbe
    Par fidgi369 dans le forum Mathématiques du collège et du lycée
    Réponses: 10
    Dernier message: 13/12/2012, 14h50
  2. tracer une courbe
    Par jonh35 dans le forum Physique
    Réponses: 20
    Dernier message: 02/05/2009, 11h29
  3. Tracer une courbe..
    Par invite1a2d3d68 dans le forum Mathématiques du collège et du lycée
    Réponses: 10
    Dernier message: 28/12/2008, 10h16
  4. Courbe à tracer
    Par invite7654323 dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 06/03/2008, 19h33
  5. Tracer une courbe
    Par invite80bafa42 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 10/09/2006, 14h11