void random1() { drndset(time(NULL)); fp = fopen(filename, "w"); if (fp == NULL) exit(EXIT_FAILURE); puts("Generating"); float rsc = (3 * PI) / 16; int i; float m, x, y, z; float sq; for (i = 0; i < count; i++) { printf("%d\n", i); //m = drnd()*1.0; m = 1.0 / count; float r = 1.0 / sqrt(pow(drnd()*0.999, -2.0 / 3.0) - 1); do { x = drnd()*2.0 - 1.0; y = drnd()*2.0 - 1.0; z = drnd()*2.0 - 1.0; sq = x * x + y * y + z * z; } while (sq > 1.0); float scale = rsc * r / sqrt(sq); x = x * scale; x = y * scale; x = z * scale; fprintf(fp, "%lf %lf %lf %lf\n", x, y, z, m); } fclose(fp); }
double norm(void){ static int s=0; static double r,th; if(s==0){ r=sqrt(-2*log(drnd()));th=2*PI*drnd(); s=1; return r*cos(th); } s=0; return r*sin(th); }
void initialize(int N, Ising **S) { int i,j; for(i=0; i<N; i++) for(j=0; j<N; j++) { if(drnd() < 0.5) S[i][j].spin=1; else S[i][j].spin=-1; } for(i=0; i<N; i++) for(j=0; j<N; j++) { S[i][j].up=i-1; S[i][j].down=i+1; S[i][j].left=j-1; S[i][j].right=j+1; } for(j=0; j<N; j++) { S[0][j].up=N-1; S[N-1][j].down=0; } for(i=0; i<N; i++) { S[i][0].left=N-1; S[i][N-1].right=0; } }
void initwo(double wo[HIDDENNO+1]) { int i ;/*繰り返しの制御*/ /*乱数による重みの決定*/ for(i=0;i<HIDDENNO+1;++i) wo[i]=drnd() ; }
void initwh(double wh[HIDDENNO][INPUTNO+1]) { int i,j ;/*繰り返しの制御*/ /*乱数による重みの決定*/ for(i=0;i<HIDDENNO;++i) for(j=0;j<INPUTNO+1;++j) wh[i][j]=drnd() ; }
void mcstep(int N, double T, Ising **S) { int i,j,k; double E_flip; double E1, E2; for(k=0; k<N*N; k++) { i=(int)(drnd()*N); j=(int)(drnd()*N); E1=-S[i][j].spin * (S[ S[i][j].up ][j].spin + S[ S[i][j].down ][j].spin + S[i][ S[i][j].left ].spin + S[i][ S[i][j].right ].spin ); E2=-(-S[i][j].spin) * (S[ S[i][j].up ][j].spin + S[ S[i][j].down ][j].spin + S[i][ S[i][j].left ].spin + S[i][ S[i][j].right ].spin ); E_flip=E2-E1; if(E_flip<0 || drnd() < exp(-E_flip/T)) S[i][j].spin=-S[i][j].spin; } }
int getpois(double la){ int i; double x,y; if(la>500){ //printf("%g ",la);fflush(stdout); i=floor(norm()*sqrt(la)+la+.5);if(i<0)i=0; return i; } x=drnd()-1e-10; y=exp(-la); i=0;while(1){ x-=y;if(x<0)return i; i++; y*=la/i; } }
int semi(int t0,int t1){ int i,s0,s1,x0,x1; double la,mu; getsc(&s1,&s0,t1,t0);// Two legs. Lower placed team is home first getsc(&x0,&x1,t0,t1);// (which affects silver goal) s0+=x0;s1+=x1; if(s0>s1)return t0; if(s0<s1)return t1; la=fn(al[t0]-be[t1]+hh[0])*15/90.;// Silver goal : two periods of 15 minutes mu=fn(al[t1]-be[t0]-hh[1])*15/90.; for(i=0;i<2;i++){ s0=getpois(la);s1=getpois(mu); if(s0>s1)return t0; if(s0<s1)return t1; } // Still tied - penalty shoot out. Assume random. if(drnd()<.5)return t0; else return t1; }
int main() { // Declaraciones FILE *dptr; int i,j,k,m,n,z,P,flag1,flag2,pos,KM,KI,I0,Ic,conc; int estado[N][2]={0},sg[SS]={0},sort[N]; double fase[N][2]={0.0},v[VECES]={0.0},vprom[SS-1]={0.0},mm[SS-1]={0.0}; double a,b,p1d,p2,pinh=0.0,pinh1=0.0,pinh2=0.0,sum,phic,smax,vtop=0; double fase_ins,fase_ini,fase_outs,fase_outi,kmapp,pmolar,trec,vmax,s; if((dptr=fopen("mminc.dat","w"))==NULL) printf("\nEl archivo de salida no puede ser abierto\n"); rand_init(); a=0.1; p2=0.999999; // PESOS MOLARES: en Daltons pmolar = 60000.; // Fraccion del tiempo de procesamiento trec = 0.01; // Calcula velocidad para una sola enzima vmax=VMAX*1.e-3*pmolar/60.0; // Calcula los parametros "b" y "phic" b=a/(vmax*DT)-3.0*a; printf("\nEl numero de iteraciones para la r. dir. es %f, el No. de ciclos/iteracion es %lf",(b/a)+3,(double)TOPE/((b/a)+3)); phic=1.0+b; // Afinidad por el sustrato KM=(int)Km*NA*VSIM/1.e6; // Afinidad por el inhibidor KI=(int)Ki*NA*VSIM/1.e6; // Concentracion de inhibidor I0=I*NA*VSIM/1.e6; // Parametros de la enzima smax=(double)KM/vmax; printf("\nsmax = %f, b = %f",smax,b); // Inicializa vector de recorrido de las enzimas for(j=0;j<N;j++) sort[j]=j; // Ciclo de las enzimas for(conc=1;conc<SS;conc++) { sg[conc-1]=conc; // Guarda valores de concentracion de sustrato s=(double)conc*NA*VSIM/1.e6; p1d=DT*s/smax; // Define probabilidad reaccion directa for(k=0;k<VECES;k++) v[k]=0.0; for(n=0;n<VECES;n++) { // Inicializacion: // Las enzimas arrancan en la region caotica rand_init(); for(i=0;i<N;i++) { fase[i][0]=drand48(); fase[i][1]=drand48(); } // Las enzimas estan en reposo for(i=0;i<N;i++) { estado[i][0]=0; estado[i][1]=1; } P=0; Ic=I0; for(z=0;z<TOPE;z++) { // Baraja vector de recorrido de las enzimas if(z==0) { for(k=0;k<10;k++) { for(j=0;j<N;j++) { pos=drnd(N); i=sort[pos]; sort[pos]=sort[j]; sort[j]=i; } } } else if(z%20==0) { for(j=0;j<N;j++) { pos=drnd(N); i=sort[pos]; sort[pos]=sort[j]; sort[j]=i; } } // Actualizacion de las fases de las enzimas for(k=0;k<N;k++) { pos=sort[k]; // Actualiza fase para sustrato if((estado[pos][0]==0)||(estado[pos][0]==1)||(estado[pos][0]==-1)) // No hay inhibidor adherido { flag1=0; flag2=0; fase_ins=fase[pos][0]; while(flag1==0) // Toma en cuenta puntos fijos { while(flag2==0) { if(fase_ins==0.5) fase_ins=drand48(); else if(fase_ins!=0.5) flag2=1; } fase_outs=enzima47(fase_ins,a,b,p1d,p2); if(fase_outs!=fase_ins) flag1=1; else fase_ins=drand48(); } fase[pos][0]=fase_outs; } // Actualiza fase para inhibidor if((I0!=0)&(Ic>=0)) // Hay inhibidor... { pinh1=(double)Ic*vmax/(10*KI); // Probabilidad de entrada del inhibidor pinh2=(double)Ic*vmax/230; // Probabilidad de salida del inhibidor if(estado[pos][1]==1) // El inhibidor entra pinh=pinh1; if(estado[pos][1]==-1) // El inhibidor sale pinh=pinh2; flag1=0; flag2=0; fase_ini=fase[pos][1]; while(flag1==0) // Toma en cuenta puntos fijos { while(flag2==0) { if(fase_ini==0.5) fase_ini=drand48(); else if(fase_ini!=0.5) flag2=1; } fase_outi=enzima47(fase_ini,a,b,pinh,p2); if(fase_outi!=fase_ini) flag1=1; else fase_ini=drand48(); } fase[pos][1]=fase_outi; } // Actualiza concentraciones // Formacion de complejo ES: el sustrato entra primero y pasa a region laminar if((estado[pos][0]==0)&(estado[pos][1]==1)&(fase_outs>1)&(fase_ins<=1)) estado[pos][0]=1; // Formacion de complejo ESI inactivo a partir de complejo ES if((estado[pos][0]==1)&(estado[pos][1]==1)&(fase_outi>1)&(fase_ini<=1)&(Ic>0)) { estado[pos][0]=11; // Detiene avance de la enzima estado[pos][1]=-1; // Inhibidor entra fase[pos][1]=drand48(); fase_outi=0.0; fase_ini=0.0; Ic--; } // Formacion de complejo ES a partir de complejo ESI if((estado[pos][0]==11)&(estado[pos][1]==-1)&(fase_outi>1)&(fase_ini<=1)) { estado[pos][0]=1; // Reanuda avance de la enzima estado[pos][1]=1; // Inhibidor salio fase[pos][1]=drand48(); fase_outi=0.0; fase_ini=0.0; Ic++; } // Complejo ES libera producto if((estado[pos][0]==1)&(estado[pos][1]==1)&(fase_outs>phic)) { estado[pos][0]=-1; // Enzima queda en recuperacion P++; } // Enzima completa ciclo y queda en reposo if((estado[pos][0]==-1)&(fabs(fase_outs-fase_ins)>=phic)) estado[pos][0]=0; // Formacion de complejo EI: el inhibidor entro primero if((estado[pos][0]==0)&(estado[pos][1]==1)&(fase_outi>1)&(fase_ini<=1)&(Ic>0)) { estado[pos][0]=10; // Detiene avance de la enzima estado[pos][1]=-1; // Inhibidor sale fase[pos][1]=drand48(); fase_outi=0.0; fase_ini=0.0; Ic--; } // Complejo EI libera inhibidor if((estado[pos][0]==10)&(estado[pos][1]==-1)&(fase_outi>1)&(fase_ini<=1)) { estado[pos][0]=0; estado[pos][1]=1; fase[pos][1]=drand48(); fase_outi=0.0; fase_ini=0.0; Ic++; } // Formacion de complejo EI a partir de complejo EIS //if((estado[pos][0]==11)&(estado[pos][1]==-1)&(fase_outs>1)&(fase_ins<=1)) // estado[pos][0]=11; } } v[n]=(double)P*1.e6*60./(NA*VSIM*DT*TOPE); } sum=0.0; for(k=0;k<VECES;k++) sum+=v[k]; vprom[conc-1]=sum/(double)VECES; printf("\nEl valor de la concentracion es %d",conc); } for(k=0;k<SS-1;k++) mm[k]=VMAX*(N*pmolar*1.e3/(NA*VSIM))*sg[k]/(Km+sg[k]); for(k=0;k<SS-1;k++) fprintf(dptr,"%d \t %f \t %f \n",sg[k],vprom[k],mm[k]); for(k=0;k<SS-1;k++) { if(vprom[k]>vtop) vtop=vprom[k]; } printf("\nVmax es %lf, Vmax/2 es %lf",vtop,vtop/2); fclose(dptr); return(0); }
/*** Return random number between -1.0 and 1.0 ***/ float dpn1() { return ((drnd() * 2.0) - 1.0); }
/*** Return random number between -1.0 and 1.0 ***/ double dpn1() { return ((drnd() * 2.0) - 1.0); }