void a1(void) { int N = 3, M = 1; data *dat = (data*) malloc(N*sizeof(data)); dat[0] = (data) { .val = 299793.0, .delta = 2.0 }; dat[1] = (data) { .val = 299792.0, .delta = 4.5 }; dat[2] = (data) { .val = 299782.0, .delta = 25.0 }; double avg = average_value(N, dat), sig_i = sigma_square_intern(N, dat), sig_e = sigma_square_extern(M, N, dat); printf("c_avg = %f\n", avg); printf("sigma_i = %f\n", sqrt(sig_i)); printf("sigma_e = %f\n", sqrt(sig_e)); } void a2(void) { int N; measurement *m = read_measurements("dat/a2.txt", &N); double a, b, sig_a, sig_b, chi; printf("\nLinear regression I = b*U:\n"); linear_regression(N, m, NULL, &b, NULL, &sig_b); chi = chi_square_(N, m, 0, b); printf("b = %f +/- %f, chi = %f\n", b, sqrt(sig_b)/2, sqrt(chi)); printf("\nLinear regression I = a + b*U:\n"); linear_regression(N, m, &a, &b, &sig_a, &sig_b); chi = chi_square_(N, m, a, b); printf("a = %f +/- %f, b = %f +/- %f, chi = %f\n", a, sqrt(sig_a)/2, b, sqrt(sig_b)/2, sqrt(chi)); } void a3(void) { // order of polynoms + 1 int N[5] = {3, 5, 9, 13, 17}; // output function (%i = current N) char *output_p_gp = "results/a3/poly-%i.gp", *output_p_txt = "results/a3/poly-%i.txt", *output_l_dat = "results/a3/legendre-%i.dat", *output_l_txt = "results/a3/legendre-%i.txt"; // read data matrix dat = read_data("dat/a3.txt"); int i; for (i = 0; i < sizeof(N)/sizeof(int); i++) { // // use polynoms // matrix F = init_F(dat, N[i], &polynom); vector b = init_b(dat, N[i], &polynom); // solve system of linear equations vector x = solve_gauss(F,b); char fp[100]; // parameter output snprintf(fp, sizeof(fp), output_p_txt, N[i]-1); printf("Opening file %s...\n", fp); FILE *file = fopen(fp, "w+"); vector_fprint(file, x); fclose(file); // gnuplot output snprintf(fp, sizeof(fp), output_p_gp, N[i]-1); printf("Opening file %s...\n", fp); file = fopen(fp, "w+"); fprintf(file, "plot "); int k; for (k = 0; k < x.N; k++) { fprintf(file, "%e * x**%i", VectorGET(x,k), k); if (k < x.N-1) fprintf(file, " + "); } fprintf(file, "\n"); fclose(file); // // Use legendre polynoms // F = init_F(dat, N[i], &legendre_polynom); b = init_b(dat, N[i], &legendre_polynom); // solve system of linear equations x = solve_gauss(F,b); // parameter output snprintf(fp, sizeof(fp), output_l_txt, N[i]-1); printf("Opening file %s...\n", fp); file = fopen(fp, "w+"); vector_fprint(file, x); // "plot" data for legendre polynoms snprintf(fp, sizeof(fp), output_l_dat, N[i]-1); printf("Opening file %s...\n", fp); file = fopen(fp, "w+"); double r = -1.0, dr = 0.01; while (r <= 1.0) { double sum = 0; for (k = 0; k < x.N; k++) { sum += VectorGET(x,k) * legendre_polynom(k,r); } fprintf(file, "%f %e\n", r, sum); r += dr; } fclose(file); file = NULL; } } int main() { //a1(); //a2(); a3(); return 0; }
int main(void){ int i,j; //r1: Ag(0) decay, r2: IC(2) formation from IgM(4), r3:IC(2) formation from IgG(3), r4: IgG(3) prod, r5: Tfh(5) rep double V[num_RXN][Type_spe]= {{-1,0,0,0,0,0},{-1,0,1,0,-1,0},{-1,0,1,-1,0,0},{0,-1,0,1,0,0},{0,0,0,0,0,a-1}}; /*stoichiometry matrix */ double C[num_RXN]= {1,(8.64E7)/Volume,0,900,0}; /* rate constant matrix c */ double V_s[num_RXN][Type_spe]={{0.}}; double C_s[num_RXN]= {0.}; double H_s[num_RXN]= {0.}; /*Permutation matrix H */ //Ag,B*,IC,IgG,IgM,Tfh double S[Type_spe][Type_dose]={{0,0,0,0},{1E5,1E5,1E5,1E5},{0,0,0,0},{0,0,0,0},{1E13,1E13,1E13,1E13},{0,0,0,0}}; /* state_matrix S: update once every */ //double S[Type_spe][Type_dose]={{0.}}; /* state_matrix S: update once every */ double P[num_RXN]={0.}; /* propensity */ double F[dose_per][Type_dose]={{0.}}; double t_range[1]={0}; double t_curr= 0.; char * File_name[]= {"State_EI.txt","State_ED.txt","State_Const.txt","State_PB.txt"}; for (i = 0; i < Type_dose; i++) { outputFiles[i] = fopen(File_name[i], "a+"); printf("%s\n",File_name[i]); } // /*Open up dosing schedule file, state files */ // State_EI=fopen("State_EI.txt", "w"); // State_ED=fopen("State_ED.txt", "a+"); // State_Const=fopen("State_Const.txt", "a+"); // State_PB=fopen("State_PB.txt", "a+"); /*Initialize F*/ init_F(F); /* initialize V_s,C_s,H_s */ init_V_C(V_s,C_s,C,V); //------------------ test set start-------------------------------------------------------------------- // // for (j=0;j<Type_dose;j++) /* Operate Gillespie for 1 day time domain*/ // { i=0; j=0; Calc_H(S,H_s,j); fprintf(outputFiles[j],"%s\t %s\t %s\t %s\t %s\t %s\t %s\n","time","Ag","B","IC","IgM","IgG","Tfh"); /* for t<= 6 */ while(i<dose_per) { S[0][j]+= F[i][j]; /* Update S[0] by respective dosing by reading F*/ printf("main.S\n %e\n",S[0][j]); Calc_H(S,H_s,j); t_range[0]=0; t_range[1]=t; printf("%f",t_range[1]); Gillespie_Fast(t_range,V_s,C_s,H_s,S,P,outputFiles[j],num_RXN_init,j); /* UPdate S*/ i=i+1; } // t_curr= dose_per; /* for t> 6 */ // while(t_curr<= t[1]) // { // Calc_H(*S,*H_s); /* Update H_s from update S */ // Calc_C_s(*C_s); // t_range[0]=0; /*should be relevant time point*/ // t_range[1]=1; /*should be relevant time point*/ // Gillespie_Fast(*t_range,*V_s,*C_s,*H_s,*S,*P,File_name[j],num_RXN); // t_curr= t_range[1]; // } // } //------------------ test set end--------------------------------------------------------------------- // // original code // // for (j=0;j<Type_dose;j++) /* Operate Gillespie for 1 day time domain*/ // { // Calc_H(S,H_s,j); // // /* for t<= 6 */ // for(i=0;i<dose_per;i++) // { // S[0][j]+= F[i][j]; /* Update S[0] by respective dosing by reading F*/ // Calc_H(S,H_s,j); // t_range[0]=i; // t_range[1]=i+1; // Gillespie_Fast(*t_range,V_s,C_s,H_s,S,P,File_name[j],num_RXN_init,j); /* UPdate S*/ // } // t_curr= dose_per; // // /* for t> 6 */ //// while(t_curr<= t[1]) //// { //// Calc_H(*S,*H_s); /* Update H_s from update S */ //// Calc_C_s(*C_s); //// t_range[0]=0; /*should be relevant time point*/ //// t_range[1]=1; /*should be relevant time point*/ //// Gillespie_Fast(*t_range,*V_s,*C_s,*H_s,*S,*P,File_name[j],num_RXN); //// t_curr= t_range[1]; //// } // } fclose(State_EI); fclose(State_ED); fclose(State_Const); fclose(State_PB); return (0); }