# "Too many input Argument" error in optimize a matrix w

I have the code to find matrix w optimal:

"prompt = 'How many relays N do you want? ';
n = input(prompt) %numbers of relay N
snrthreshdb=10;
snrthesh=10^(snrthreshdb/10);
phi2=1; %0db
Psdb=14;%14db
Ps=10^(Psdb/10);
In=eye(n,n)%Identity matrix nxn
fRn=zeros(1,n)
gRn=zeros(1,n);
hRn=zeros(1,n);
cEn=zeros(1,n);
phifc=zeros(1,n);
phigc=zeros(1,n);
phifh=zeros(1,n);

for count=1:n
fRn(1,count)=normrnd(0,1)+normrnd(0,1)*i %row vector
gRn(1,count)=normrnd(0,1)+normrnd(0,1)*i %row vector
hRn(1,count)=normrnd(0,1)+normrnd(0,1)*i %row vector
cEn(1,count)=normrnd(0,1)+normrnd(0,1)*i %row vector
phifc(1,count)=fRn(1,count)*cEn(1,count);
phigc(1,count)=gRn(1,count)*cEn(1,count);
phifh(1,count)=fRn(1,count)*hRn(1,count)
end

Rff=diag(fRn);
Rgg=diag(gRn);
Rhh=diag(hRn);
Rfh=phifh*ctranspose(phifh);

for Psum=10:5:40
PRi=Psum/(n+1);
Pn=Psum/(n+1);
Q=Ps * Rff+Pn * Rgg+phi2*In

``````cvx_begin
variable w(n,n) complex
minimize (w')*Q*w %.............................................................error position
(Ps*(w')*Rfh*w)/(phi2*(1+(w')*Rhh*w))>=10;
for count=1:n
w(count,count)*(w(count,count)')*Q(1,1)<=PRi;
end
cvx_end
``````

`end"`

After running the program, I received error message:
"Error using minimize
Too many output arguments.
Error in desRsvsPs (line 40)
minimize (w’)Qw"
Can someone help me solve the problem?

The error message is because the closing parenthesis is in the wrong place. It should be
`minimize (w'*Q*w)`

However, once you do that, you will encounter another, more serious, error. That is because your objective function evaluates to an n by n matrix. it needs to evaluate to a real scalar. Because I don’t know what you are trying to model, I can’t tell you how to fix it.

This is first time I used cvx to simulate an article so I really don’t know how to make a cvx code from a formula.
I try to simulate formula in red box (the above are parts of formula in red box)

For starters, w should be a vector, not a matrix.

Then you have more work to do to get the problem into a form CVX can accept, if that is even possible (I leave that to you).

Hi, Mark_L_Stone can you help me

function [lame_eau, CemaParam] = CemaNeige( Pt, T, Tmax, Tmin, Date, CemaParam )

G = CemaParam.G;
eTg = CemaParam.eTg;
Zz = CemaParam.Zz;
ZmedBV = CemaParam.ZmedBV;
Beta = CemaParam.Beta;
Tf = CemaParam.Tf;
QNBV = CemaParam.QNBV;
Vmin = CemaParam.Vmin;

CTg = CemaParam.CTg;
Kf = CemaParam.Kf;

[JJ] = JJdate (Date(1),Date(2),Date(3));
eday = zeros( 1,3 ) ;
eday(1) = JJ(1);
eday(2) = Date(1);

eday(3) = eomday(eday(2),2);
if eday(3) == 29
if JJ(1) > 59
JJ(1)=JJ(1)-1;
end
end

i = 1;

ind = JJ(1);

Tz = T + theta*(Zz - ZmedBV)./100;
Tzmax = Tmax+theta*(Zz-ZmedBV)./100;
Tzmin = Tmin+theta*(Zz-ZmedBV)./100;
Pdis = Pt/5;
modc = exp(Beta*(Zz-ZmedBV));
c = sum(modc)/5;
Pz = (1/c)*Pdis(1)exp(Beta(Zz-ZmedBV));

Fracneige = zeros(1,5);

for z = 1 : 5
if ZmedBV < 1500 % Fonction Hydrotel
if Tzmax(z) <= 0
Fracneige(z) = 1;
elseif Tzmin(z) >= 0
Fracneige(z) = 0;
else
Fracneige(z) = 1-(Tzmax(z)/(Tzmax(z)-Tzmin(z)));
end
else
if Tz(z) > 3
Fracneige(z) = 0;
elseif Tz(z) < -1
Fracneige(z) = 1;
else
Fracneige(z) = 1-((Tz(z)-(-1))/(3-(-1)));
end
end
end

Fracneige = min(Fracneige,1);
Fracneige = max(Fracneige,0);

Pg = Pz .* Fracneige;
Pl = Pz - Pg;

G = G + Pg;
eTg = CTg*eTg+(1-CTg)*Tz;
eTg = min(0,eTg);

fTg = (eTg >= Tf);

Fpot = (Tz > 0) .* (min(G,Kf*(Tz-Tf).*fTg));

Gseuil = QNBV*0.9;
fnts = min(G/Gseuil,1);

fonte = Fpot .* ((1-Vmin)*fnts+Vmin);

G = G - fonte;
lame_eau = sum(Pl) + sum(fonte);
CemaParam.G = G;
CemaParam.eTg = eTg;

end

function [JJ] = JJdate (A,M,J)
test = and(mod(A,4)==0,or(mod(A,100)~=0,mod(A,400)==0));
x = test+0;
JJ = floor(275*M/9)-(2-x).*floor((M+9)/12)+J-30;
end

function CemaParam = CemaNeigeInit( Zz, ZmedBV, Beta, gradT, x, Tf, QNBV, Vmin )
CemaParam.CTg = x(end-1);
CemaParam.Kf = x(end);

CemaParam.G = zeros( 1,5 ) ;
CemaParam.eTg = zeros( 1,5 ) ;

CemaParam.Zz = Zz;
CemaParam.ZmedBV = ZmedBV;
CemaParam.Beta = Beta;