2016-11-30 4 views
0

データを生成してテキストファイルに書き出すcファイルを実行しています。以下は、さまざまなパラメータに対してこのファイルを複数回実行するbashスクリプトです。 Cコードを単独で実行しても問題はありません。下のスクリプトでそれを実行すると、データはテキストファイルに保存されません(まだ作成されています)。テキストファイルへの印刷があるforループがスキップされているようです(このforループの前後にprintステートメントを置くことによって確認されます)。bashから実行するとループが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

関連する問題