for iter = 1:parameters.iteration
if mod(iter, 1) == 0
fprintf(1, '.');
end
if mod(iter, 10) == 0
fprintf(1, ' %5d\n', iter);
end
%%%% update lambda
lambda.beta = 1 ./ (1 / parameters.beta_lambda + 0.5 * diag(atimesaT.mu));
%%%% update a
a.sigma = (diag(lambda.alpha .* lambda.beta) + KmKm / sigma_g^2) \ eye(D, D);
a.mu = a.sigma * KmtimesGT.mu / sigma_g^2;
atimesaT.mu = a.mu * a.mu' + a.sigma;
%%%% update G
G.sigma = (eye(P, P) / sigma_g^2 + etimeseT.mu) \ eye(P, P);
G.mu = G.sigma * (reshape(a.mu' * Km, [N, P])' / sigma_g^2 + be.mu(2:P + 1) * f.mu' - repmat(etimesb.mu, 1, N));
GtimesGT.mu = G.mu * G.mu' + N * G.sigma;
KmtimesGT.mu = Km * reshape(G.mu', N * P, 1);
%%%% updat