X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=pkg%2Fsrc%2Ffunctions.c;h=1f355857e28d2510dbe5219942124e25163b1b66;hb=0f5fbd1371011f25cd1f6caf0e826d2ea9e4e245;hp=f311a34d52d7c468f3697ed9669eb2d229423302;hpb=bbdcfe44da4011574dabb19b4f83e2ab199c667a;p=morpheus.git diff --git a/pkg/src/functions.c b/pkg/src/functions.c index f311a34..1f35585 100644 --- a/pkg/src/functions.c +++ b/pkg/src/functions.c @@ -3,62 +3,64 @@ // Index matrix (by columns) int mi(int i, int j, int d1, int d2) { - return j*d1 + i; + return j*d1 + i; } // Index 3-tensor (by columns, matrices ordered by last dim) int ti(int i, int j, int k, int d1, int d2, int d3) { - return k*d1*d2 + j*d1 + i; + return k*d1*d2 + j*d1 + i; } // Empirical cross-moment of order 2 between X size nxd and Y size n void Moments_M2(double* X, double* Y, int* pn, int* pd, double* M2) { - int n=*pn, d=*pd; - //double* M2 = (double*)calloc(d*d,sizeof(double)); + int n=*pn, d=*pd; + //double* M2 = (double*)calloc(d*d,sizeof(double)); - // M2 = E[Y*X^*2] - E[Y*e^*2] = E[Y (X^*2 - I)] - for (int j=0; j + // W = 1/N sum( t(g(Zi,theta)) g(Zi,theta) ) // with g(Zi, theta) = i-th contribution to all moments (size dim) - real moments void Compute_Omega(double* X, double* Y, double* M, int* pn, int* pd, double* W) { - int n=*pn, d=*pd; + int n=*pn, d=*pd; int dim = d + d*d + d*d*d; //double* W = (double*)malloc(dim*dim*sizeof(double)); @@ -81,7 +83,7 @@ void Compute_Omega(double* X, double* Y, double* M, int* pn, int* pd, double* W) g[j] = 0.0; if (idx1 == idx2) g[j] -= Y[i]; - g[j] += Y[i] * X[mi(i,idx1,n,d)]*X[mi(i,idx2,n,d)] - M[j]; + g[j] += Y[i] * X[mi(i,idx1,n,d)]*X[mi(i,idx2,n,d)] - M[j]; } for (int j=d+d*d; j