如何处理超出范围的错误?

时间:2014-06-04 21:07:04

标签: c++ gsl

更新:
忘了提到,因为循环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循环会发生错误。

  • 数据:原始数据文件,nxp矩阵
  • p:数据中的变量数
  • cov:pxp数据的协方差矩阵
  • tri:从gsl_linalg_cholesky_decomp函数中存放的低trianlge矩阵
  • p:px1载体,从N(0,1)
  • 随机产生
  • x:tri * p
  • 示例:记录10000x

代码:

  //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);

}

0 个答案:

没有答案