ACIN_Cal.m 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. function [ G , F , R ] = ACIN_Cal( W , X , G , F , Omega_G , Omega_F , Phi_G , Phi_F , Mean_F , mu , F_theo , N_iter )
  2. W2 = W.^2;
  3. Omega_Bar_G = ones(size(G))-Omega_G;
  4. Omega_Bar_F = ones(size(F))-Omega_F;
  5. Delta_G = G.*Omega_Bar_G;
  6. Delta_F = F.*Omega_Bar_F;
  7. m = size(F,2)-1;
  8. R = zeros(N_iter+1,1);
  9. R(1) = norm(F(2,1:end-1)-F_theo(2,1:end-1),2)/sqrt(size(F_theo,2)-1);
  10. for i = 1 : N_iter
  11. % updating G
  12. Delta_G = Updt_Delta_G( W2 , X , Delta_G , Phi_G , F , Omega_Bar_G );
  13. G = Phi_G + Delta_G;
  14. % updating F
  15. Delta_F = Updt_Delta_F( W2 , X , G , Delta_F , Phi_F , Omega_Bar_F , Mean_F , mu , m );
  16. F = Phi_F + Delta_F;
  17. R(i+1) = norm(F(2,1:end-1)-F_theo(2,1:end-1),2)/sqrt(size(F_theo,2)-1);
  18. end
  19. end
  20. function [ Delta_F ] = Updt_Delta_F( W , X , G , Delta_F , Phi_F , Omega_B_F , Mean_F , mu , m )
  21. %%%%%%%%%%%%%%%%%%%%%%%%%%%
  22. % Update rule for Delta_F %
  23. %%%%%%%%%%%%%%%%%%%%%%%%%%%
  24. Delta_F = Delta_F.*(Omega_B_F.*(G'*(W.*secu_plus(X-G*Phi_F)))+mu/m*diag(Mean_F)*Omega_B_F)./(Omega_B_F.*(G'*(W.*(G*Delta_F)))+mu/m^2*diag(Delta_F*ones(m+1,1))*Omega_B_F);
  25. Delta_F(isnan(Delta_F))=0;
  26. end
  27. function [ Delta_G ] = Updt_Delta_G( W , X , Delta_G , Phi_G , F , Omega_B_G )
  28. %%%%%%%%%%%%%%%%%%%%%%%%%%%
  29. % Update rule for Delta_G %
  30. %%%%%%%%%%%%%%%%%%%%%%%%%%%
  31. Delta_G = Delta_G.*(Omega_B_G).*((W.*secu_plus(X-Phi_G*F))*F')./((W.*(Delta_G*F)*F')); % mise à jour
  32. Delta_G(isnan(Delta_G))=0;
  33. end
  34. function [toto] = secu_plus(tutu,s)
  35. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  36. % Goal: Security in the NMF procedure which project the negative data to
  37. % epsilon (small user-defined threshold)
  38. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  39. if(nargin<2)
  40. s=1.e-12;
  41. end
  42. toto=max(tutu,s);
  43. toto(isnan(tutu)) = 0;
  44. end