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, ¶ms)/lklhood(x_cur, ¶ms);
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;
}
我感謝你的幫助。
是啊,我是一個傻瓜。我感謝你的幫助chw21。 – MinimizeTheAction