コード例 #1
0
ファイル: rng.c プロジェクト: Fudge/rb-gsl
static VALUE rb_gsl_rng_fwrite(VALUE obj, VALUE io)
{
  gsl_rng *h = NULL;
  FILE *f = NULL;
  int status, flag = 0;
  Data_Get_Struct(obj, gsl_rng, h);
  f = rb_gsl_open_writefile(io, &flag);
  status = gsl_rng_fwrite(f, h);
  if (flag == 1) fclose(f);
  return INT2FIX(status);
}
コード例 #2
0
ファイル: test.c プロジェクト: jokulhlaup/elle_patch
void
rng_read_write_test (const gsl_rng_type * T)
{
  unsigned long int test_a[N], test_b[N];

  int i;

  gsl_rng *r = gsl_rng_alloc (T);

  for (i = 0; i < N; ++i)
    {
      gsl_rng_get (r);  /* throw away N iterations */
    }

  { /* save the state to a binary file */
    FILE *f = fopen("test.dat", "wb"); 
    gsl_rng_fwrite(f, r);
    fclose(f);
  }

  for (i = 0; i < N; ++i)
    {
      test_a[i] = gsl_rng_get (r);
    }

  { /* read the state from a binary file */
    FILE *f = fopen("test.dat", "rb"); 
    gsl_rng_fread(f, r);
    fclose(f);
  }

  for (i = 0; i < N; ++i)
    {
      test_b[i] = gsl_rng_get (r);
    }

  {
    int status = 0;
    for (i = 0; i < N; ++i)
      {
        status |= (test_b[i] != test_a[i]);
      }
    /*gsl_test (status, "%s, random number generator read and write",*/
              /*gsl_rng_name (r));*/
  }

  gsl_rng_free (r);
}
コード例 #3
0
ファイル: random_wrap.c プロジェクト: haskelladdict/gsl
/* rng_fwrite writes the state of the rng to a file with filename
 * NOTE: It would be much better to be able to use the gsl API
 * function gsl_rng_fwrite to write to any Go writer but I am not
 * sure how to do that or if it is even possible. */
int rng_fwrite(const char *fileName, const gsl_rng *r) {

  FILE *file = fopen(fileName, "w");
  if (file == NULL) {
    return 1;
  }

  int status = gsl_rng_fwrite(file, r);
 
  // we need to flush the stream since otherwise the stream
  // remains empty. I don't understand why.
  if (fflush(file) != 0) {
    return 1;
  }
  
  return status;
}
コード例 #4
0
ファイル: utils.c プロジェクト: lccanon/ggen
int ggen_rng_save(gsl_rng **r,const char *file)
{
	FILE *f;
	int e1,e2;
	f = fopen(file,"wb");
	if(!f) return 1;

	e1 = gsl_rng_fwrite(f,*r);
	if(e1) error("GSL error: %s\n",gsl_strerror(e1));

	e2 = fclose(f);
	if(e2) error("I/O error: %s\n",strerror(e2));

	if(e1 || e2)
		return 2;
	else
		return 0;
}
コード例 #5
0
ファイル: opinionsw.c プロジェクト: orahcio/chaos_sw
void opiniao(int **rede, par *P, int s[], unsigned long int sem, unsigned long int sem_rede, char out[], char fran[]) {
  // ---------------------------------------------------
  // Aqui é a parte da simulação da dinâmica de opinião.
  // ---------------------------------------------------

  // Obtendo os parâmetros
  int *h, k_max=0; // vetor de conectividade e com o estado dos sitios;
  double epsilon=P->eps, J=P->J, q=P->q;
  int i, w, t, tt, T=P->T_mcs, nt=P->D_mcs; // passo monte-carlo e iterador de sítios da rede
  double *tau, rho=0; // campo local de cada sítio e taca de transição
  FILE *f=fopen(out,"w"), *g, *ff=fopen(fran,"r");
  char ou[255];
  // Variáveis do gerador
  gsl_rng *r;

  // Arquivo de saída de estado
  strcpy(ou,out);
  strcat(ou,"~");

  // Iniciando a galera
  h=(int *)calloc(n,I);
  // Pegar o grau máximo
  for(i=0;i<n;i++)
    if(rede[i][0]>k_max) k_max=rede[i][0];
  
  // Constrói as taxas de k=0 até o grau máximo
  tau=make_tau(k_max,J,q,epsilon);
  // Iniciando a semente de números aleatórios
  r = gsl_rng_alloc (gsl_rng_mt19937);
  gsl_rng_fread(ff,r);
  fclose(ff);

  for(i=0;i<n;i++)
    rho+=s[i];
  rho/=((double)n);
  // Primeiro ponto na saida
  fprintf(f, "%lf\n", rho);

  // O monte-carlo começa aqui
  for(t=0;t<T;t+=nt) {
    g=fopen(ou,"w");
    ff=fopen(fran,"w");
    fprintf(g,"# N=%d\tk=%d\tp=%lf\tsem=-1\tJ=%lf\teps=%lf\tq=%lf\tSR=%lu\n",n,K,p,J,epsilon,q,sem_rede);
    fprintf(g, "# Semente: -1\n");
    for(tt=0;tt<nt;tt++) {
            
      // Calcular o vetor h dos sítios
      for(i=0;i<n;i++) {
	h[i]=0;
	for(w=1;w<=rede[i][0];w++) {
	  h[i]+=s[rede[i][w]];
	}
      }

      // Atualiza os sítios
      for(i=0;i<n;i++) {
	if(gsl_rng_uniform(r)<tau[h[i]-1+(rede[i][0]+1)*rede[i][0]/2])
	  s[i]=1;
	else
	  s[i]=0;
      }

      // Calcula a densidade de estados
      rho=0;
      for(i=0;i<n;i++)
	rho+=s[i];
      rho/=((double)n);
      
      // Imprime saída
      fprintf(f, "%lf\n", rho);
      
    }
    // Salvando o estado
    for(i=0;i<n;i++)
      fprintf(g, "%d\n", s[i]);
    gsl_rng_fwrite(ff,r);
    fclose(g);
    fclose(ff);
  }
  
  free(tau);
  free(h);
  // Libera memória do gerador
  gsl_rng_free (r);
  
}