Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C]Utilizzo delle pipe nella grafica con gnuplot

    Ciao ragazzi =) vorrei chiedervi se potre indicarmi qualche pdf o qualche link dove discute dell'utilizzo delle pipe per avere una dinamicità visiva nell'elaborazione dati, volendo utilizzare gnuplot per far ciò. Cioè il codice mi deve leggere da file i dati e tramite gnuplot vedere che li plotta punto per punto. Oppure se non risulta molto complicato potreste indicarmi come dovrei fare (cioè la sintassi e l'utilizzo) e le avvertenze da prendere in considerazione?
    "I don't know anything, but I do know that everything is interesting if you go into it deeply enough."(Richard P. Feynman)

    “Don’t waste time living someone else’s life. Stay hungry. Stay Foolish” (Steve Jobs)

  2. #2
    Non ho mica capito cosa vuoi fare e cosa c'entri il C in tutto questo...
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Questo di seguito è un esempio preso da internet. A me serve solo capire come avere gli stessi effetti di gnuplot volendo graficare ul randomWalk in tre dimensioni

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <math.h>
    
    #define L 400
    
    #define L2   (L * L)
    #define VOL   L2
    #define DIM   2
    #define DIM2 (2 * DIM)
    
    #define FNORM   (2.3283064365e-10)
    #define RANDOM  ((ira[ip++] = ira[ip1++] + ira[ip2++]) ^ ira[ip3++])
    #define FRANDOM (FNORM * RANDOM)
    #define pm1 ((FRANDOM > 0.5) ? 1 : -1)
    
    /*   Address: x + y * L      */
    /*   Ordine J: +x +y -x -y   */
    
    int s[VOL], mag, ener;
    float prob[2*DIM2+1];
    
    unsigned myrand, ira[256];
    unsigned char ip, ip1, ip2, ip3;
    
    unsigned rand4init(void)
    {
      unsigned long long y;
      
      y = (myrand*16807LL);
      myrand = (y&0x7fffffff) + (y>>31);	  	  	                  
      if (myrand&0x80000000)
        myrand = (myrand&0x7fffffff) + 1;
      return myrand;
    }
    
    void Init_Random(void)
    {
      unsigned i;
      
      ip=128;
      ip1=ip-24;
      ip2=ip-55;
      ip3=ip-61;
      
      for (i=ip3; i<ip; i++)
        ira[i] = rand4init();
    }
    
    void Errore(char* stringa)
    {
      fprintf(stderr, "ERROR: %s\n", stringa);
      exit(1);
    }
    
    void Init_Prob(float temp)
    {
      int i;
    
      if (temp > 0.0)
        for (i=0; i<=2*DIM2; i++)
          prob[i] = exp(-2.*i/temp);
      else
        for (i=0; i<=2*DIM2; i++)
          prob[i] = 0.0;
    }
    
    void Init_Spin(void)
    {
      unsigned site;
    
      mag = 0;
      for (site=0; site<VOL; site++) {
        s[site] = pm1;
        mag += s[site];
      }
      ener = 0;
      for (site=0; site<VOL-L; site++)
        ener -= s[site] * s[site+L];
      for (site=VOL-L; site<VOL; site++)
        ener -= s[site] * s[site+L-VOL];
      for (site=0; site<VOL; site++) {
        if (site%L == L-1)
          ener -= s[site] * s[site+1-L];
        else
          ener -= s[site] * s[site+1];
      }
    }
    
    void One_Step(void)
    {
      unsigned site, ix, iy;
      int index;
    
      site = 0;
      // caso iy = 0
      // caso ix = 0
      index = s[site] * (s[site+L2-L] + s[site+L-1] + s[site+1] + s[site+L]);
      if (index <= 0 || FRANDOM < prob[index]) {
        s[site] = -s[site];
        mag += 2 * s[site];
        ener += 2 * index;
      }
      site++;
      //caso 0 < ix < L-1
      for (ix=1; ix<L-1; ix++, site++) {
        index = s[site] * (s[site+L2-L] + s[site-1] + s[site+1] + s[site+L]);
        if (index <= 0 || FRANDOM < prob[index]) {
          s[site] = -s[site];
          mag += 2 * s[site];
          ener += 2 * index;
        }
      }
      // caso ix = L-1
      index = s[site] * (s[site+L2-L] + s[site-1] + s[site+1-L] + s[site+L]);
      if (index <= 0 || FRANDOM < prob[index]) {
        s[site] = -s[site];
        mag += 2 * s[site];
        ener += 2 * index;
      }
      site++;
      // caso 0 < iy < L-1
      for (iy=1; iy<L-1; iy++) {
        // caso ix = 0
        index = s[site] * (s[site-L] + s[site+L-1] + s[site+1] + s[site+L]);
        if (index <= 0 || FRANDOM < prob[index]) {
          s[site] = -s[site];
          mag += 2 * s[site];
          ener += 2 * index;
        }
        site++;
        //caso 0 < ix < L-1
        for (ix=1; ix<L-1; ix++, site++) {
          index = s[site] * (s[site-L] + s[site-1] + s[site+1] + s[site+L]);
          if (index <= 0 || FRANDOM < prob[index]) {
    	s[site] = -s[site];
    	mag += 2 * s[site];
    	ener += 2 * index;
          }
        }
        // caso ix = L-1
        index = s[site] * (s[site-L] + s[site-1] + s[site+1-L] + s[site+L]);
        if (index <= 0 || FRANDOM < prob[index]) {
          s[site] = -s[site];
          mag += 2 * s[site];
          ener += 2 * index;
        }
        site++;
      }
      // caso iy = L-1
      // caso ix = 0
      index = s[site] * (s[site-L] + s[site+L-1] + s[site+1] + s[site+L-L2]);
      if (index <= 0 || FRANDOM < prob[index]) {
        s[site] = -s[site];
        mag += 2 * s[site];
        ener += 2 * index;
      }
      site++;
      //caso 0 < ix < L-1
      for (ix=1; ix<L-1; ix++, site++) {
        index = s[site] * (s[site-L] + s[site-1] + s[site+1] + s[site+L-L2]);
        if (index <= 0 || FRANDOM < prob[index]) {
          s[site] = -s[site];
          mag += 2 * s[site];
          ener += 2 * index;
        }
      }
      // caso ix = L-1
      index = s[site] * (s[site-L] + s[site-1] + s[site+1-L] + s[site+L-L2]);
      if (index <= 0 || FRANDOM < prob[index]) {
        s[site] = -s[site];
        mag += 2 * s[site];
        ener += 2 * index;
      }
      site++;
      if (site != VOL)
        Errore("in One_Step");
    }
    
    void Write_Config(char * filename)
    {
      unsigned i;
      FILE * out = fopen(filename, "w");
      
      for (i=0; i<VOL; i++)
        if (s[i] == 1)
          fprintf(out, "%u %u\n", i%L, (unsigned)(i/L));
      fclose(out);
    }
    
    
    int main(int argc, char *argv[])
    {
      unsigned t, n_samples, is, n_iter, flag;
      float temperature;
      FILE * gpl;
    
      if (argc != 5) {
        fprintf(stderr, "usage: %s <T> <n_iter> <n_samples> <seed>\n",
    	    argv[0]);
        exit(1);
      }
      
      temperature = (float)atof(argv[1]);
      n_iter = (unsigned)atoi(argv[2]);
      n_samples = (unsigned)atoi(argv[3]);
      myrand = (unsigned)atoi(argv[4]);
      
    /*   printf("# L = %d   T = %.3f   random_seed = %u\n", L, temperature, myrand); */
    /*   fflush(stdout); */
    
      Init_Random();
      Init_Prob(temperature);
    
      gpl = popen("gnuplot -persist","w");
      fprintf(gpl, "unset key\n set size square\nset xra [0:%u]\nset yra [0:%u]\n",
    	  L, L);
      sleep(1);
    
      for (is=0; is<n_samples; is++) {
    
        Init_Spin();
        Write_Config("conf.dat");
        fprintf(gpl, "plot 'conf.dat' w d\n");
        fflush(gpl);
        sleep(1);
        //printf("%u %g %g\n", 0, (float)ener/VOL, (float)mag/VOL);
        flag = 1;
        for (t=1; t<=n_iter && flag; t++) {
          One_Step();
          //printf("%u %g %g\n", t, (float)ener/VOL, (float)mag/VOL);
          if (t % 10 == 0) {
    	Write_Config("conf.dat");
    	fprintf(gpl, "rep\n");
    	fflush(gpl);
    	sleep(1);
    	if (ener == -2*VOL)
    	  flag = 0;
          }
        }
    /*     printf("\n"); */
    /*     fflush(stdout); */
      }
      return 0;
    }
    "I don't know anything, but I do know that everything is interesting if you go into it deeply enough."(Richard P. Feynman)

    “Don’t waste time living someone else’s life. Stay hungry. Stay Foolish” (Steve Jobs)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.