view util/classes/@dictionary/spark.m @ 174:dc2f0fa21310 danieleb

multiple trials with error bars
author Daniele Barchiesi <daniele.barchiesi@eecs.qmul.ac.uk>
date Thu, 17 Nov 2011 11:16:15 +0000
parents e3035d45d014
children
line wrap: on
line source
function varargout = Spark(obj)
% Calculates the minimum number of linearly dependent atoms in the matrix A
% WARNING: this function computes a combinatorial function, use only if the
% size of the problem is small (i.e. <20)
if nargout <= 1
    A = obj.phi;
    k = size(A,2);
    if k>20
        warning('This function computes a combinatorial function, use only if thesize of the problem is small (i.e. <20).');
        choice = input('The calculation of spark will take a long time... do you wish to continue anyway (y/n)','s');
        if strcmpi( choice,'n')
            return
        end
    end
    sigma = 2;
    while true
        P = nchoosek(1:k,sigma);
        for i=1:size(P,1)
            r = rank(A(:,P(i,:)));
            if r<sigma
                varargout{1} = sigma;
                return
            end
        end
        sigma = sigma + 1;
        if sigma==k
            varargout{1} = inf;
            return
        end
    end
else
    %% TODO: calculate lower and upper bounds on the spark
    varargout{1} = 2;
    varargout{2} = inf;
end