Gnuplot

Résolu
nil -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Ce programme marche, mais lorsque que je fait gnuplot
le graphe ne s'affiche pas
il met 'bad data '
bien à vous

#include<iostream>
using namespace std;
int main(){
  double x=0.1,r=2;
  int p;
for (p=1;p<=100;p++){
  x=r*(1-x);
  cout<<"differentes valeurs de x" <<x<<endl;}
return 0;
}


1 réponse

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Bonjour,

    Pour utiliser gnuplot, il faut stocker tes points dans un fichier de données (un fichier texte traditionnellement une extension ".dat").

    Ensuite sois tu fais un script gnuplot (fichier ".gnu") qui définira ton fichier de données (e.g. toto.dat), tes axes et ton format de sortie (personnellement je préconise svg pour avoir un rendu vectoriel).

    Dans le code suivant, le code cpp génère le fichier toto.dat et le fichier toto.gnu :

    #include <iostream>
    #include <fstream>
    
    bool make_dat(const char *filename_wext, double ui, double r) {
      bool ret = true;
      std::string filename(filename_wext);
    
      filename += ".dat";
      std::ofstream ofs(filename);
      if (ofs) {
        for (unsigned i = 0; i < 100; i++) {
           ui = r * (1 - ui);
           ofs << i << '\t' << ui << std::endl;
        }
        ofs.close();
        std::cerr << filename << " written" << std::endl;
      } else {
        std::cerr << "Cannot write " << filename << std::endl;
        ret = false;
      }
      return ret;
    }
    
    bool make_gnu(const char *filename_wext) {
      bool ret = true;
      std::string filename(filename_wext);
    
       filename += ".gnu";
      std::ofstream ofs(filename);
      if (ofs) {
        ofs << "set terminal svg" << std::endl
            << "set output \"" << filename_wext << ".svg\"" << std::endl
            << "plot \"" << filename_wext << ".dat\" using 1:2 with lines" << std::endl;
        ofs.close();
        std::cerr << filename << " written" << std::endl;
      } else {
        std::cerr << "Cannot write " << filename << std::endl;
        ret = false;
      }
      return ret;
    }
    
    int main() {
      double ui = 0;
      double r = 2;
      const char *filename_wext = "toto";
    
      make_dat(filename_wext, ui, r);
      make_gnu(filename_wext);
    
      return 0;
    }
    


    Il ne reste plus qu'à le compiler et le lancer, puis appeler gnuplot.

    (mando@velvet) (~) $ g++ toto.cpp && ./a.out && gnuplot toto.gnu
    toto.dat written
    toto.gnu written


    Tu auras alors un fichier toto.svg, que tu peux afficher par exemple avec chrome/chromium.

    Bonne chance
    0