45 Matrix2D<double> S, W, inW, invM, Ez, WtX, Wp1, Wp2, invWp2, WinvM, WinvMWt, WtSDIW, invCS;
58 while (!converged && iter<=
Niters)
70 for (
size_t k=0;
k<N; ++
k)
77 for (
size_t k=0;
k<N; ++
k)
91 for (
size_t k=0;
k<N; ++
k){
100 for (
size_t kk = 0; kk <
outputDim; ++kk)
105 sigma2_new +=
VEC_ELEM(normX,
k) - 2 * EzWtX + t;
107 sigma2_new/=(double) N * (
double) D;
117 WinvMWt*=1/sigma2_new;
120 WtSDIW*=1/sigma2_new;
123 double detC = pow(sigma2_new,D)* WtSDIW.
det();
126 Q = (N*(-0.5)) * (D *
log (2*
PI) +
log(detC) + invCS.
trace());
131 if (iter>2 &&
abs(oldQ-Q) < 0.001)
#define FOR_ALL_ELEMENTS_IN_MATRIX2D(m)
void subtractColumnMeans(Matrix2D< double > &A)
Matrix2D< double > Y
Output data.
void matrixOperation_AB(const Matrix2D< double > &A, const Matrix2D< double > &B, Matrix2D< double > &C)
void setSpecificParameters(size_t Niters=200)
Set specific parameters.
Matrix2D< double > * X
Pointer to input data.
void inv(Matrix2D< T > &result) const
void abs(Image< double > &op)
void matrixOperation_IminusA(Matrix2D< double > &A)
void matrixOperation_AtA(const Matrix2D< double > &A, Matrix2D< double > &B)
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
size_t outputDim
Output dim.
#define MAT_ELEM(m, i, j)
void log(Image< double > &op)
void rowEnergySum(Matrix1D< T > &sum) const
void matrixOperation_IplusA(Matrix2D< double > &A)
void matrixOperation_ABt(const Matrix2D< double > &A, const Matrix2D< double > &B, Matrix2D< double > &C)
#define DIRECT_A3D_ELEM(v, k, i, j)
FileName fnMapping
Save mapping.
void write(const FileName &fn) const
void initRandom(size_t Ydim, size_t Xdim, double op1, double op2, RandomMode mode=RND_UNIFORM)
void reduceDimensionality()
Reduce dimensionality.
void matrixOperation_AtBt(const Matrix2D< double > &A, const Matrix2D< double > &B, Matrix2D< double > &C)