function ix_a = escolhe_sub_base_ApAd1(A,alpha,e,tol)
%devolve a lista ix_a dos indices dos elementos da subbase escolhida
%a lista pode ser vazia e nao contem os elementos cujos alphas sao zeros

%ApAd1 nao tem sentido se erro_a > tol, pois elemento_eh_critico teria
%que olhar para todos de qualquer maneira

nb = size(A,2);
fprintf(2,'calculo dos deltas\n');
for j = 1:nb
    delta(j) = abs(alpha(j))*norma_erro_Linf(A(:,j));
end

fprintf(2,'ordenando os deltas\n');
[delta_s,ix] = sort(delta);
ix_a = [];
nb_a = 0;
erro_a = norma_erro_Linf(e);
fprintf(2,'%d erro inicial = %9.6f\n',erro_a);
for k = 1:nb
    j = ix(k);
    fprintf(2,'considerando elemento %d delta = %9.6f',j,delta(j));
    erro_prox = erro_a + delta(j);
    fprintf(2,' erro_prox = %9.6f',erro_prox);
    if (erro_prox > tol) && (delta(j) > 0)
        %nao adianta olhar os elementos que restam
        fprintf(2,' terminado\n');
        nr = nb - k + 1;
        ix_a = ix(k:nb);
        nb_a = nr;
        break
    end
    %podemos eliminar o elemento j
    fprintf(2,' eliminado\n');
    alpha(j) = 0;
    erro_a = erro_prox;
end
assert((nb_a >= 0) && (nb_a <= nb))
fprintf(2,'eliminados %d elementos, mantidos %d \n',nb-nb_a,nb_a);
fprintf(2,'%d erro estimado = %9.6f\n',erro_a);
ix_a = sort(ix_a);
