##活跃集方法
function [W,H] = NMFLS_f(A,k,maxit)
[m,n]=size(A);
%初始化W,记为W0
W=rand(m,k);
H=rand(k,n);
tol=0.5;
%规范化W0
for i=1:k
W(:,i)=W(:,i)/norm(W(:,i),1);
end
disp(norm(A-W*H,'fro'))
for p=1:maxit
if norm(A-W*H,'fro')>tol
for o=1:n
H(:,o)=lsqnonneg(W,A(:,o));
end
for j=1:m
w=lsqnonneg(H',A(j,:)');
W(j,:)=w';
end
end
end
W=sparse(W);
H=sparse(H);
disp(W)
disp(H)
figure(1)
spy(W)
figure(2)
spy(H)
disp(norm(A-W*H,'fro'))
end
##测试部分
A=struct2array(load('A_med.mat'));
k=1033;
maxit=2;
[W,H] = NMFLS_f(A,k,maxit);