更新:
忘了提到,因为循环1-51可以运行,但任何数字更大。不会......
错误是
gsl: ../gsl/gsl_matrix_double.h:275: ERROR: first index out of range
Default GSL error handler invoked.
Aborted
我的程序结构如下。当我画一次样品时,程序运行正常。当我添加for()运行10000次时,我上面提到了错误。
void drawSample(cov,z,x,p){...}
int main(){
...for(int i=0;i<10000;i++){//error occures when I have the circle
drawSample(cov,z,x,p);
}
}
我想循环中发生了一些错误,但我无法弄明白。
为了让您更容易理解,我会粘贴相关部分,以及一些简单的解释。我认为代码并不重要,因为for循环会发生错误。
代码:
//1.2 draw one sample
void drawSample(gsl_matrix* cov,gsl_matrix* z,gsl_matrix* x, int p)
{
gsl_matrix* tri = gsl_matrix_alloc(p, p);
gsl_matrix_memcpy (tri, cov);
gsl_linalg_cholesky_decomp (tri);
for(int i=0;i<p;i++){
for(int j=0;j<p;j++){
if(i<j){
gsl_matrix_set(tri,i,j,0);}
}
}
const gsl_rng_type* T;
gsl_rng * r;
double a;
gsl_rng_env_setup();
T = gsl_rng_default;
r = gsl_rng_alloc (T);
for(int i=0;i<p;i++){
a = gsl_ran_gaussian (r, 1);
gsl_matrix_set(z,i,0,a);
}
matrixproduct(tri,z,x);
gsl_rng_free(r);
gsl_matrix_free(tri);
}