#include #include #include #include int k; double * tau; long int *binom; long int _binom(k, i) { if (i == 0) return 1; else return ((k-i+1)*_binom(k, i-1))/i; } double f(double x) { double y; int i; y = 0; for (i=0; i<=k; i++) { y += tau[i] * binom[i]*pow(x,i)*pow(1-x, k-i); } return y; } int main() { int i; double x, h; double J, W; srand48(time(NULL)); k=20; W = 10; tau = (double *) calloc(k+1, sizeof(double)); binom=(long int *) calloc(k+1, sizeof(long int)); /* precalcolo i coeff. binomiali */ for (i=0; i<=k; i++) { binom[i] = _binom(k,i); } for (J=0; J>=-10; J-=0.01) { /* calcolo le prob. di transizione */ for (i=0; i<=k; i++) { h = (double) (2*i-k)/k; tau[i] = 1/(1+exp(-2*(J*h + W*h*h*h))); } x = drand48(); // initial value for (i=0; i<2000+100; i++) { x = f(x); if (i>2000){ printf("%f %f\n", J, x); } } } }