我正在进行一项蒙特卡洛试验,并评估下文所述绝对损失功能。 由于这在计算上非常密集,我谨选择我的准则,进一步改进速度。 我的主要法典是MATLAB,但我正在利用MATLAB的MEX功能评价C的功能。
数学问题如下: 我有一个矩阵D,有层面(M倍N)。 通常M值约为20 000,N值约为{10、30、144}。
矩阵D的定义
实际上,我需要获得L栏病媒,其尺寸(M倍)的定义是:
矩阵L的定义
我的C职能就是这样做:
void absolute_loss(double *D, double *L, mwSize cols, mwSize rows)
{
double aux;
int i;
int j;
int k;
for (i = 0; i < rows; i++) {
for (j = 0; j < rows; j++){
aux = 0;
for (k = 0; k < cols; k++) {
aux = aux + fabs(D[j + rows * k] - D[i + rows * k]);
}
L[i] = L[i] + aux;
}
}
for (i = 0; i < rows; i++) {
L[i] /= rows;
}
}
任何建议都受到高度赞赏。