1

我在 MEX 中使用mxCreateSparse.

mxArray *W;
W=mxCreateSparse(n*n,n*n,xsize,mxREAL);
double *wpoint;
wpoint=mxGetPr(W);
for(p=0;p<xsize;p++)
 {
     Wpoint[(returnindex1(xi[p][0],xi[p][1])-1)*n*n + (returnindex1(xj[p][0],xj[p][1]))]=   exp(-df[p]/(SIGMAI*SIGMAI)) * exp(-dx[p]/(SIGMAJ*SIGMAJ));
 }

来自的最大值(returnindex1(xi[p][0],xi[p][1])-1)*n*n + (returnindex1(xj[p][0],xj[p][1]))n*n*n*n,我创建了维度的稀疏矩阵(n*n)X(n*n)

当我显示整个矩阵时,一些零元素是垃圾。同样对于较大的值n,分段错误发生在wpoint

4

1 回答 1

0

pr数组包含xsize元素,并且您使用超出范围的索引访问该数组。因此,段违规。

我认为你的根本问题是你还没有完全掌握稀疏矩阵是如何存储在 MATLAB 中的。我不是 MATLAB 实现细节方面的专家,但我记得它使用压缩列存储。

本质上,有 3 个数组,如下所示:

  • double pr[NZMAX]其中包含NZMAX非零值。
  • int ir[NZMAX]其中包含 中每个值的行号pr
  • int jc[m]它索引prir标识每m列中的第一项。

这是执行摘要,但我建议您更仔细地阅读详细信息。

于 2011-05-25T10:14:24.473 回答