2016-11-30 91 views
0

我正在运行一个生成数据并将其写入文本文件的c文件。下面是一个bash脚本,它为不同的参数多次运行这个文件。当我单独运行c代码时,没有任何问题。当我用下面的脚本运行它时,没有数据被保存到文本文件中(它们仍然被创建)。它似乎是跳过文本文件打印到的for循环(通过在for循环之前和之后放置打印语句来确定)。当从bash运行时,For循环在c文件中跳过

#!/bin/bash 

make studentt_sampler 

# arguments to pass to ./studentt_sampler 
no_samples=5 
nu=3.0 
mu=1.0 
sigma=1.0 
data_files=("data_file_0p01.txt" "data_file_0p1.txt" "data_file_1.txt" "data_file_10.txt") 
proposal_sigma=(0.01,0.1,1.0,10.0) 

# arguments to pass to post_process.py 
figure_files=("chain_0p01.pdf" "chain_0p1.pdf" "chain_1.pdf" "chain_10.pdf") 


for i in `seq 0 3`; 
do 
    #echo ${data_files[$i]} 
    ./studentt_sampler no_samples nu mu sigma "${data_files[$i]}" "${proposal_sigma[$i]}" & 
    # ./post_process.py echo ${data_files[$i]} echo ${figure_files[$i]} 

done 

wait 

C文件的主要功能是

int main(int argc, char *argv[]) { 
    /* Initialization */ 
    const gsl_rng_type * T; 
    gsl_rng * r; 


    /* set iteration variables and the order of the student-t distribution 
    * from the command line arguments */ 
    int i, itr = atoi(argv[1]); 

    /* parameters of student t distributions */ 
    double nu = atof(argv[2]); 
    double mu = atof(argv[3]); 
    double sigma = atof(argv[4]); 

    /* store the parameters in param_type struct */ 
    struct param_type params = {nu,mu,sigma}; 

    /* open text file for writing and make sure it works*/ 

    printf("%s\n",argv[5]); 
    FILE *f = fopen(argv[5], "w"); 

    if (f == NULL) { 
     printf("Error opening file!\n"); 
     exit(1); 
    } 

    /* allocate memory for generator and set its seed */ 
    r = gsl_rng_alloc(gsl_rng_mt19937); 
    gsl_rng_set(r,1); 

    /* Start initial value */ 
    double x_cur = 1.0; 
    double proposal_sigma = atof(argv[6]); 
    double alpha; 
    double x_prop; 
    int accept; /* keep track of acceptance rate */ 
    double u; /* to make decision of accept proposal or not */ 
    double accept_prob; 

    /* Start the MCMC */ 
    for (i=0;i<itr;i++) { 
     printf("here!!!\n"); 
     /* propose a new x */ 
     x_prop = gsl_ran_gaussian(r,proposal_sigma) + x_cur; 

     /* Calculate acceptance probability */ 
     accept_prob = lklhood(x_prop, &params)/lklhood(x_cur, &params); 
     alpha = GSL_MIN(1.0,accept_prob); 

     /* Accept or not, decide */ 
     u = gsl_ran_flat(r,0.0,1.0); 
     if (u < alpha) { 
      x_cur = x_prop; 
      accept = 1; 
     }/* print to data file */ 
     else { 
      accept = 0; 
     } 
     fprintf(f," %.5f %i\n",x_cur,accept); 
    } 

    /* Clean up time */ 
    fclose(f); 


    return 0; 
} 

我感谢你的帮助。

回答

3

难道你忘了,你提供给程序中的变量的$,即它不应该是:

./studentt_sampler $no_samples $nu $mu $sigma "${data_files[$i]}" "${proposal_sigma[$i]}" & 
+0

是啊,我是一个傻瓜。我感谢你的帮助chw21。 – MinimizeTheAction