file is outputcvxsept22.txt disp('Sept 22/09 ') Sept 22/09 startupcvx % personal startup command to add correct paths addpath c:\software.d\cvx\builtins addpath c:\software.d\cvx\commands addpath c:\software.d\cvx\functions addpath c:\software.d\cvx\lib addpath c:\software.d\cvx\structures addpath c:\software.d\cvx\examples addpath c:\software.d\cvx disp('try out the quickstart command') try out the quickstart command echo off %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SECTION 2.1: LEAST SQUARES % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Input data m = 16; n = 8; A = randn(m,n); b = randn(m,1); % Matlab version x_ls = A \ b; % cvx version cvx_begin variable x(n); minimize( norm(A*x-b) ); cvx_end echo off Results: -------- norm(A*x_ls-b): 2.0354 norm(A*x-b): 2.0354 cvx_optval: 2.0354 cvx_status: Solved Verify that x_ls == x: x_ls = [ -0.2628 0.8828 -0.0734 -1.0844 0.3249 -0.3330 0.0603 0.3802 ] x = [ -0.2628 0.8828 -0.0734 -1.0844 0.3249 -0.3330 0.0603 0.3802 ] Residual vector: A*x-b = [ -0.3262 -0.0070 -0.9543 0.2447 -0.6418 -0.3426 -0.1870 0.2960 0.6024 -0.0440 0.6238 -0.7399 0.0849 0.9323 0.4799 -0.0762 ] Press Enter/Return for the next example... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SECTION 2.2: BOUND-CONSTRAINED LEAST SQUARES % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % More input data bnds = randn(n,2); l = min( bnds, [] ,2 ); u = max( bnds, [], 2 ); if has_quadprog, % Quadprog version x_qp = quadprog( 2*A'*A, -2*A'*b, [], [], [], [], l, u ); Optimization terminated: relative function value changing by less than OPTIONS.TolFun. % cvx version cvx_begin variable x(n); minimize( norm(A*x-b) ); subject to x >= l; x <= u; cvx_end echo off Results: -------- norm(A*x_qp-b): 4.1334 norm(A*x-b): 4.1334 cvx_optval: 4.1334 cvx_status: Solved Verify that l <= x_qp == x <= u: l = [ -0.5618 0.2760 -0.2277 -0.0290 -0.9287 0.4520 0.1014 -0.3658 ] x_qp = [ -0.0910 0.2918 0.2746 -0.0290 0.0828 0.4520 0.1014 0.6919 ] x = [ -0.0910 0.2918 0.2746 -0.0290 0.0828 0.4520 0.1014 0.6919 ] u = [ -0.0910 0.7395 0.9403 0.1842 0.0828 0.7450 2.4881 0.6919 ] Residual vector: A*x-b = [ -0.1209 0.2155 -1.0903 -0.1312 -2.0952 1.6798 0.3784 -0.5592 1.0411 0.6937 1.6036 -0.0045 0.9935 0.2156 1.2186 -1.2228 ] Press Enter/Return for the next example... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SECTION 2.3: OTHER NORMS AND FUNCTIONS: INFINITY NORM % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if has_linprog, % linprog version f = [ zeros(n,1); 1 ]; Ane = [ +A, -ones(m,1) ; ... -A, -ones(m,1) ]; bne = [ +b; -b ]; xt = linprog(f,Ane,bne); Optimization terminated. x_lp = xt(1:n,:); % cvx version cvx_begin variable x(n); minimize( norm(A*x-b,Inf) ); cvx_end echo off Results: -------- norm(A*x_lp-b,Inf): 0.7079 norm(A*x-b,Inf): 0.7079 cvx_optval: 0.7079 cvx_status: Solved Verify that x_lp == x: x_lp = [ -0.0944 0.8498 -0.1119 -1.1311 0.3804 -0.3017 0.2201 0.2488 ] x = [ -0.0944 0.8498 -0.1119 -1.1311 0.3804 -0.3017 0.2201 0.2488 ] Residual vector; verify that the peaks match the objective (0.7079): A*x-b = [ -0.0431 -0.0539 -0.7079 0.7079 -0.7079 -0.7079 -0.1800 0.5049 0.7079 -0.0040 0.7079 -0.7079 -0.1010 0.7079 0.7079 -0.2187 ] Press Enter/Return for the next example... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SECTION 2.3: OTHER NORMS AND FUNCTIONS: ONE NORM % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if has_linprog, % Matlab version f = [ zeros(n,1); ones(m,1); ones(m,1) ]; Aeq = [ A, -eye(m), +eye(m) ]; lb = [ -Inf*ones(n,1); zeros(m,1); zeros(m,1) ]; xzz = linprog(f,[],[], Aeq,b,lb,[]); Optimization terminated. x_lp = xzz(1:n,:); % cvx version cvx_begin variable x(n); minimize( norm(A*x-b,1) ); cvx_end echo off Results: -------- norm(A*x_lp-b,1): 5.3359 norm(A*x-b,1): 5.3359 cvx_optval: 5.3359 cvx_status: Solved Verify that x_lp == x: x_lp = [ -0.3550 0.8934 -0.0375 -1.1827 0.1694 -0.3870 -0.2148 0.6712 ] x = [ -0.3550 0.8934 -0.0375 -1.1827 0.1694 -0.3870 -0.2148 0.6712 ] Residual vector; verify the presence of several zero residuals: A*x-b = [ -0.7666 0.0129 -1.4977 0.0000 -0.5074 -0.0000 -0.0000 0.0357 0.0000 0.0000 0.0299 -1.0842 -0.0000 1.4013 0.0000 -0.0000 ] Press Enter/Return for the next example... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SECTION 2.3: OTHER NORMS AND FUNCTIONS: LARGEST-K NORM % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % cvx specification k = 5; cvx_begin variable x(n); minimize( norm_largest(A*x-b,k) ); cvx_end echo off Results: -------- norm_largest(A*x-b,k): 3.5394 cvx_optval: 3.5394 cvx_status: Solved Optimal vector: x = [ -0.0944 0.8498 -0.1119 -1.1311 0.3804 -0.3017 0.2201 0.2488 ] Residual vector; verify a tie for 5-th place ( 0.7079): A*x-b = [ -0.0431 -0.0539 -0.7079 0.7079 -0.7079 -0.7079 -0.1800 0.5049 0.7079 -0.0040 0.7079 -0.7079 -0.1010 0.7079 0.7079 -0.2187 ] Press Enter/Return for the next example... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SECTION 2.3: OTHER NORMS AND FUNCTIONS: HUBER PENALTY % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % cvx specification cvx_begin variable x(n); minimize( sum(huber(A*x-b)) ); cvx_end echo off Results: -------- sum(huber(A*x-b)): 4.1428 cvx_optval: 4.1428 cvx_status: Solved Optimal vector: x = [ -0.2628 0.8828 -0.0734 -1.0844 0.3249 -0.3330 0.0603 0.3802 ] Residual vector: A*x-b = [ -0.3262 -0.0070 -0.9543 0.2447 -0.6418 -0.3426 -0.1870 0.2960 0.6024 -0.0440 0.6238 -0.7399 0.0849 0.9323 0.4799 -0.0762 ] Press Enter/Return for the next example... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SECTION 2.4: OTHER CONSTRAINTS % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % More input data p = 4; C = randn(p,n); d = randn(p,1); % cvx specification cvx_begin variable x(n); minimize( norm(A*x-b) ); subject to C*x == d; norm(x,Inf) <= 1; cvx_end echo off Results: -------- norm(A*x-b): 5.9545 cvx_optval: 5.9545 cvx_status: Solved Optimal vector: x = [ 0.1173 1.0000 0.0979 -0.1256 0.5255 0.7102 -0.0127 0.8397 ] Residual vector: A*x-b = [ -0.7438 0.0763 -2.0376 -1.3110 -2.3956 0.2175 -1.2595 -0.7583 1.6970 1.9857 0.8180 1.0527 2.5150 -1.2068 2.1631 -0.1360 ] Equality constraints: C*x = [ 1.0035 -2.6761 0.0168 -1.4432 ] d = [ 1.0035 -2.6761 0.0168 -1.4432 ] Press Enter/Return for the next example... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SECTION 2.5: AN OPTIMAL TRADEOFF CURVE % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % The basic problem: % cvx_begin % variable x(n); % minimize( norm(A*x-b)+gamma(k)*norm(x,1) ); % cvx_end echo off Generating tradeoff curve... gamma norm(x,1) norm(A*x-b) --------------------------------------- 1.0000e-002 3.3796e+000 2.0355e+000 1.6238e-002 3.3658e+000 2.0357e+000 2.6367e-002 3.3433e+000 2.0362e+000 4.2813e-002 3.3068e+000 2.0374e+000 6.9519e-002 3.2473e+000 2.0408e+000 1.1288e-001 3.1498e+000 2.0497e+000 1.8330e-001 2.9878e+000 2.0737e+000 2.9764e-001 2.7617e+000 2.1280e+000 4.8329e-001 2.3445e+000 2.2924e+000 7.8476e-001 1.4081e+000 2.8895e+000 1.2743e+000 3.7687e-001 3.9510e+000 2.0691e+000 1.0114e-008 4.4813e+000 3.3598e+000 5.3229e-009 4.4813e+000 5.4556e+000 1.9095e-009 4.4813e+000 8.8587e+000 5.4562e-010 4.4813e+000 1.4384e+001 2.6802e-010 4.4813e+000 2.3357e+001 3.7101e-010 4.4813e+000 3.7927e+001 1.0869e-010 4.4813e+000 6.1585e+001 2.5093e-011 4.4813e+000 1.0000e+002 2.8799e-011 4.4813e+000 Done. (Check out the graph!)