comment faire des graphiques sous c++ avec gnu plot?

comment faire des graphiques sous c++ avec gnu plot? - C++ - Programmation

Marsh Posté le 02-03-2008 à 13:50:50    

J'ai tapé un code source avec dev c++ dans lequel 'essaie de créer un fichier utilisable par gnu plot, le problème c'est que ça compile bien mais qu'après quand je lance gnu plot il me dit que mon fichier n'existe pas
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <fstream>
 
using namespace std;
 
const int M=500; //nb of time steps of size dt
const int N=50000; //nb of stochastic realization
const int L=40; //nb of sampling poointsfor S
const double K=100; //The strike
const double left=0, right=130; // the barriers
const double sigmap=0.2, r=0.1; // vol., rate
const double pi2 =8*atan(1), dt=1./M, sdt =sqrt(dt), eps=1.e-50;
const double er=exp(-r);
 
double gauss();
double EDOstoch(const double x,int m);
double EDOstoch_barrier(const double x, int m, const double Smin, const double Smax);
double payoff(double s);
 
double gauss()
{
 return sqrt(eps - 2.*log(eps + rand()/(double) RAND_MAX))*cos(rand()*pi2/RAND_MAX);
 }
 
 double EDOstoch(const double x, int m)
 {
        double S= x;
        for (int i=0;i<m;i++)
        S +=S*(sigmap*gauss()*sdt+r*dt);// gives S(x, t=m*dt)
        return S;
        }
double EDOstoch_barrier(const double x, int m,const double Smin, const double Smax)
{
       if ((x<=Smin)||(x>=Smax))
       return -1000;
       double S= x;
       for (int i=0;i<m;i++)
       {
           if ((S<=Smin)||(S>=Smax))
           return -1000;
           S +=S*(sigmap*gauss()*sdt+r*dt);
       }
       return S;
       }
       
       double payoff(double s)
       {
              if (s>K)      return s-K; else return 0;
              }
               
       int main( )
       {
           ofstream f("stoch.dat" );
           for(double x=0.;x<2*K;x+=2*K/L)
           {
                      double value =0;
                      double y,S ;
                      for (int i=0;i<N;i++)
                      {
                          S=EDOstoch(x,M);
                          // S=EDOstoch_barier(x,m, left, right); // for barrier options
                      double y=0;
                      if(S>=0)
                      y = er*payoff(S);
                      value +=y;
                      }
                      f << x <<"\t" <<value/N<< endl;
                      }
                      return 0;
       }
 
J'ouvre gnu plot et j'écris plot "stoch.dat" et la il dit Skipping unreadable data "stoch.dat" No data in plot. Pourquoi? Q'est ce qui ne va pas dans mon programme?


Message édité par dilemne le 02-03-2008 à 14:33:08
Reply

Marsh Posté le 02-03-2008 à 13:50:50   

Reply

Marsh Posté le 02-03-2008 à 17:19:08    

c'est fou il n'y pas une seule personne capable de me donner une réponse ici?

Reply

Marsh Posté le 02-03-2008 à 18:39:51    

Chez moi ça marche  :??:  
 
J'utilise gnuplot 4.2
 
Le "stoch.dat" generé :
 


0 0
5 0
10 0
15 0
20 0
25 0
30 0
35 0
40 0
45 0.00110952
50 0.00673572
55 0.0284623
60 0.107391
65 0.324653
70 0.7458
75 1.52666
80 2.84282
85 4.59722
90 6.97009
95 9.86763
100 13.3184
105 17.1063
110 21.2113
115 25.6255
120 30.2903
125 34.7515
130 39.5577
135 44.6761
140 49.6359
145 54.578
150 59.3165
155 64.647
160 69.5236
165 74.4875
170 79.6428
175 84.3688
180 89.5191
185 94.3761
190 99.5209
195 104.535


 
le résultat sous gnuplot :
 
http://img160.imageshack.us/img160/4876/stochzc4.th.png


Message édité par yoyo+ le 02-03-2008 à 18:41:31
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed