# Why Isn’t BP Working?

With the advice of a commenter yesterday, I replaced my CVX code with that by Michael Elad, which is just the linear program presented in S. S. Chen, D. L. Donoho, and M. A. Saunders, “Atomic decomposition by basis pursuit,” SIAM J. Sci. Comput., vol. 20, pp. 33-61, Aug. 1998., i.e.,

xhatBP = linprog( ones(2*N,1), [], [], [Phi, -Phi], y, zeros(2*N,1), 100*ones(2*N,1) );
xhatBP = xhatBP(1:N) – xhatBP(N+1:end);

where N is the length of x before sensing by Phi, creating the measurements in y = Phi x.
The last two inputs ensure that the solution has positive elements between 0 and 100. With this change I ran OMP, PrOMP, and BP for 1000 iterations, and find the same behavior as yesterday! (Code here.)

Why is this relaxed sparsity constraint performing so poorly with respect to the probability of “exact recovery” (which is when $$||\vx – \hat\vx||_2^2 \le 10^{-10}$$)? I remember reading somewhere that “a good rule of thumb is $$M \approx 5K$$,” where the sparsity is $$K$$, and the number of measurements is $$M$$; but that seems a bit low looking at these results. I am still not convinced this underperformance of BP is not due to some numerical error, or my naïveté in selecting a proper sensing matrix.