# 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