Error Too many Outputs Arguments

I am trying to run this program but Error occur
“Too many outputs Arguments”

clear all
clc 
% Generate data
dbar=[0 25 0 16 0;25 0 0 0 0;16 0 0 0 0;0 0 0 0 0;0 0 0 0 0];
w=[0 1 0 1 0;1 0 0 0 0;1 0 0 0 0;0 0 0 0 0;0 0 0 0 0];
one=ones(5,1);
% Create and solve problem
cvx_begin
   variable G(5,5)
   minimize(norm(dbar - (w.*(diag(G)*one'- 2*G + one*diag(G)')),'fro'))^2
  
   subject to
   
        G >= 0;
        G*one == 0;
cvx_end

% Display results
disp( [ '   ans   =   ', sprintf( '%7.4f', G ) ] );

The error is due to squaring an entire minimize statement, rather than just the argument of minimize. To show it more clearly, presume there were a CVX variable x. Then what you did is comparable to the statement minimize(x)^2, which would produce the

Error using minimize
Too many output arguments.

error message. The correct way of minim9izing x^2 is minimize(x^2).

Now getting back to your problem, even if you made this fix, then in CVX 2.1, you would get an error message due to squaring norm. So instead you should use square_pos. But even better, just minimize norm rather than its square, which may be better behaved numerically. To do that, just remove the ^2 from your program, and it should execute correctly.

1 Like