X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=pkg%2Fsrc%2Ffunctions.c;h=b634c98ddab1c8713171b1437e8597bbf98e5a11;hb=9ac8ecc09912bba5c6109557ebe20575e49b2870;hp=f251eb349fe2be411b05273753ea0b7ebc617ab2;hpb=9a6881ed8a16c31a3dbe995e3b1af76c1db6b5a0;p=morpheus.git diff --git a/pkg/src/functions.c b/pkg/src/functions.c index f251eb3..b634c98 100644 --- a/pkg/src/functions.c +++ b/pkg/src/functions.c @@ -1,16 +1,10 @@ #include // Index matrix (by columns) -int mi(int i, int j, int d1, int d2) -{ - return j*d1 + i; -} +#define mi(i, j, d1, d2) (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; -} +#define ti(i, j, k, d1, d2, d3) (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) @@ -54,11 +48,9 @@ void Moments_M3(double* X, double* Y, int* pn, int* pd, double* M3) } } -#include - // 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) +void Compute_Omega(double* X, int* Y, double* M, int* pn, int* pd, double* W) { int n=*pn, d=*pd; int dim = d + d*d + d*d*d; @@ -99,8 +91,6 @@ void Compute_Omega(double* X, double* Y, double* M, int* pn, int* pd, double* W) g[j] -= Y[i] * X[mi(i,idx1,n,d)]; g[j] += Y[i] * X[mi(i,idx1,n,d)]*X[mi(i,idx2,n,d)]*X[mi(i,idx3,n,d)] - M[j]; } - - // TODO: 1/n des gj empirique doit tendre vers 0 // Add 1/n t(gi) %*% gi to W for (int j=0; j