function b = calcula_vetor_de_aprox_SO(A,f,s,np_comp,sigma)
% np = size(f,1);
% nf = size(f,2);
% assert(size(A,1) == np)
% assert(size(s,1) == np)
% assert(size(s,2) == nf)
% %Calcula o vetor independente b
% %Minimos quadrados com supressao de outlier
% %calcula g que eh a aproximacao s + uma fracao de (f-s).
% sigma = 2*sigma;
% alpha = 0.25;
% for i = 1:np
%     for j = 1:nf
%         ei = f(i,j) - s(i,j);
%         zi = ei/sigma;
%         if abs(zi) > 10
%             wi = 0;
%         else
%             gp = exp(-zi^2/2)/(sigma*sqrt(2*pi));
%             wi = (1 - alpha)*gp/(alpha + (1 - alpha)*gp);
%         end
%         g(i,j) = (1 - wi)*s(i,j) + wi*f(i,j);
%         %fprintf(2,'erro = %9.6f eh reduzido para %9.6f\n',zf,zg);
%     end
% end
% b = (A'*g)/np_comp;
% 
% 
% 


np = size(f,1);
nf = size(f,2);
assert(size(A,1) == np)
assert(size(s,1) == np)
assert(size(s,2) == nf)
%Calcula o vetor independente b
%Minimos quadrados com supressao de outlier
%calcula g que eh a aproximacao s + uma fracao de (f-s).
for i = 1:np
    for j = 1:nf
        zf = f(i,j) - s(i,j);
        zg = zf/hypot(1,zf/sigma);
        g(i,j) = s(i,j) + zg;
        %fprintf(2,'erro = %9.6f eh reduzido para %9.6f\n',zf,zg);
    end
end
b = (A'*g)/np_comp;



