# How to reformulate this in a CVX way: Cube over Square

Hello~ Mr. Mark. Regard to the Dm^3/Tm^2, I have proved it is convex. As f=(Dm)^3 is convex,
According to the perspective operation of convex function,
the perspective function of f is g=Tm*(Dm/Tm)^3, which is also convex where Dm/Tm belongs to the f domain. (Dm and Tm are real and non-negative)

The reason of f=Dm^3 (sqrt((x1-x2)^2+(y1-y2)^2)^3) is convex is that
[x1,x2,y1,y2]H[x1,x2,y1,y2]’ (this equals 6*[x1-x2)^2+(y1-y2)^2)^3]) is always larger or equal to 0 when these 4 variables are real and non-negative, where H is the Hessian matrix of function f.

So, is there any way to express this in cvx? If still no, can I use the lower bound to replace this?

I will defer to @Michal_Adamaszek or someone else to address this.

Thank you for this! Mark~

First define variable Dm(M,1), then change

to Dm(i)>=norm(qm(i+1,:)-qm(i,:));. then expressing Dm^3/Tm^2 will do your job.

1 Like

Thank you for your help Jack. But Tm is a affine variable, could we do the division of the affine in CVX?

Please follow Mark’s advice above to express Dm^3/Tm^2.

Actually Mark’s advice cannot handle this as my expression in fact is ||qm+1-qm||^3/Tm^2. Thank you Jack, I am currently trying just dividing this expression to see whether could work or not.

Hello Mark. I recently used this “rotated_lorentz(1)” way to express ||qm+1 - qm||^3/Tm^2 like this:
variables qm(M+1,2) Tm(M,1) temp1(M,1) temp2(M,1)
for i=1:M
{qm(i+1,:)-qm(i,:),temp2(i),Tm(i)} == rotated_lorentz(1);
{temp2(i),temp1(i),qm(i+1,:)-qm(i,:)} == rotated_lorentz(1);
end
Then use temp1 in place of ||qm+1 - qm||^3/Tm^2. What do you think, is that right?

You have implicitly constrained qm(i+1,:)-qm(i,:) >= 0, and have nothing which does what norm does. it appears that you are trying to generalize @Michal_Adamaszek’s formulation for a scalar argument in a way which is not valid. Your qm(i+1,:)-qm(i,:) is not even a scalar, as it is in @Michal_Adamaszek’s formulation.

yes exactly, I am still stuck in this problem.

For the record, here is the formulation for norm(y)^3/x^2, as provided by @Michal_Adamaszek at How to reformulate this in a CVX way

Declare a variable t , add the constraint geo_mean([t,x,x])>=norm(y), and use t in place of norm(y)^3/x^2

Yes thank you Mark, I see. Thank you very much!