#include #include #include using namespace std; float data[1000000][128]; float mean(float *data, int size) { float sum = 0; for(int i = 0; i < size; ++i) sum += data[i]; return sum/size; } float stdev(float *data, int size, float mean) { float sum = 0; for(int i = 0; i < size; ++i) sum += (data[i] - mean) * (data[i] - mean); return sqrt(sum/(size - 1)); } void random_walk(int length_rw, int number_rw) { for(int i = 0; i < number_rw; ++i) { data[i][0] = 0; for(int j = 1; j < length_rw; ++j) { float bias = (float)RAND_MAX / 2; data[i][j] = data[i][j - 1] + (float)random() - bias; } } } int main(int argc, char *argv[]) { srandom(time(NULL)); if(argc != 3) { cerr << "Usage: random_walk length number" << endl; exit(1); } int length = atoi(argv[1]); int number = atoi(argv[2]); random_walk(length, number); //Normalization for(int i = 0; i < number; ++i) { float mean_i = mean(data[i], length); float std_i = stdev(data[i], length, mean_i); for(int j = 0; j < length; ++j) data[i][j] = (data[i][j] - mean_i)/std_i; } //Write to the output file FILE *outfile; outfile = fopen("random_w.dat","w"); if(!outfile) { cerr << "Open output file error!" << endl; exit(1); } for(int i = 0; i < number; ++i) { for(int j = 0; j < length; ++j) fprintf(outfile,"%8f\t", data[i][j]); fprintf(outfile,"\n"); } return 1; }