Transform a complex problem to an equivalent real-valued

18 views
Skip to first unread message

Ignacio

unread,
Jan 3, 2019, 4:55:07 AM1/3/19
to YALMIP
Hello,

I am optimally solving a simple and convex problem in which I minimize 

mi(max(abs(A*x)))
s.t. (b*x)=constant
where A, b and x are complex numbers.

In Yalmp this is something like
obj=max(abs(A*x));
cons=[b*x == 1];
solvesdp(cons,obj,ops)

Now I would like to solve the equivalent real-valued problem (it is necessary for the next steps of the problem). I have succesfully solved it with the triangle inequality and minimizing both components separately:
[real (A) -imag(A)]* [real (x)  imag(x)]^(t)
[imag(A) real(A)]* [real (x)  imag(x)]^(t)

But I am over-restricting the problem and consequently the results that I am obtaining are not optimal.

Any idea of how can I obtain the equivalent (and thus optimal) real-valued problem? I know that there is a way of doing this transformation without over-restricting it but I have not discovered it yet.

Regards,
Ignacio


Johan Löfberg

unread,
Jan 3, 2019, 5:04:38 AM1/3/19
to YALMIP
not sure what you want. max(abs(A*x)) will be converted yo the corresponding real-valued socp

abs(A*x) is norm([real(A*x);imag(A*x)]), which different compared to y = A*x;max([abs(y(1));abs(y(2))]) (i.e. elementwise abs vs vector-valued abs). In other words, the max operator is redundant as abs(A*x) is a scalar

there is no command called solvesdp, it's optimize.

Ignacio

unread,
Jan 3, 2019, 7:31:22 AM1/3/19
to YALMIP
Hello Johan,

Thanks for your quick answer. The max is because A is a matrix. I am gonna try to explain the problem a little better.

The original problem is:
w=sdpvar(length(n),1,'full','complex');
obj=max(abs(VS*w));
cons=[VP*w == 1];

This is exactly the same as:
VSr=[real(P(LS,:)) -imag(P(LS,:))];
VSi=[imag(P(LS,:)) real(P(LS,:))];
VPr=[real(P0) -imag(P0)];
wr=sdpvar(2*length(n),1);
obj=max(abs(VSr*wr+(VSi*wr)*1i));
cons=[VPr*wr == 1];

The problem is when you want to remove completely complex numbers. Then, with the triangle inequality you can do something like:
obj=max(abs(VSr*wr)+abs(VSi*wr));

But the solution obtained is not as good as in the previous case. I know there is a way od doing this without loosing anything.

Regards,
Ignacio



Johan Löfberg

unread,
Jan 3, 2019, 7:45:14 AM1/3/19
to YALMIP
sorry, I though matlab convention was that as was vector norm of complex vector

If you get different results when you try to do it manually, compared to YALMIP modelling it for you, isn't that a sign that your manual derivation got wrong somewhere? It's very unclear what you are talking about as all of a sudden you talk about P and LS, but you started with VS and w
Reply all
Reply to author
Forward
0 new messages