我使用mxCreateSparse在MEX中创建了一个稀疏矩阵。
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。
发布于 2011-05-25 10:14:24
pr数组包含xsize元素,您可以使用超出边界的索引访问该数组。因此违反了规则。
我认为您的基本问题是,您还没有完全理解如何在MATLAB中存储稀疏矩阵。我不是MATLAB实现细节方面的专家,但我记得它使用压缩列存储。
实质上,有3个数组如下:
double pr[NZMAX],它包含非零values.int ir[NZMAX],它包含pr.int jc[m]中每个值的行号,该值索引到pr和ir,标识每个m列中的第一个项。这是执行摘要,但我建议你更仔细地阅读细节。
https://stackoverflow.com/questions/6120319
复制相似问题