# Euclidean projection on the nonnegative orthant

    % Section 8.1.1, Boyd & Vandenberghe "Convex Optimization"
    % Joelle Skaf - 10/07/05
    %
    % The projection of x0 on the proper cone K = R+^n is given by
    %           minimize || x - x0 ||^2
    %               s.t.    x >= 0
    % It is also given by: P_K(x0)_k = max{x0_k,0}

    cvx_quiet(true);
    % Input data
    randn('seed',0);
    n  = 10;
    x0 = randn(n,1);

    fprintf(1,'Computing the analytical solution...');

    % Analytical solution
    pk_x0 = max(x0,0);

    fprintf(1,'Done! \n');

    % Solution via CVX
    fprintf(1,'Computing the solution via a QP...');

    cvx_begin
        variable x(n)
        minimize ( norm(x - x0) )
        x >= 0;
    cvx_end

    fprintf(1,'Done! \n');

    % Verification
    disp('-----------------------------------------------------------------');
    disp('Verifying that the analytical solution and the solution obtained via QP are equal: ');
    [pk_x0 x]
    disp('They are equal as expected!');

    Computing the analytical solution...Done!
    Computing the solution via a QP...Done!
    -----------------------------------------------------------------
    Verifying that the analytical solution and the solution obtained via QP are equal:

    ans =

        1.1650    1.1650
        0.6268    0.6268
        0.0751    0.0751
        0.3516    0.3516
             0    0.0000
        1.6961    1.6962
        0.0591    0.0590
        1.7971    1.7971
        0.2641    0.2641
        0.8717    0.8717

    They are equal as expected!