 How to write many inequality constraints in a matrix form?

(dazzy .L) #1

i have the following inequality constraints , instead of using a loop , i want to make it in matrix form , how to do that so that both solutions will be same y is a scalar , r and p are vectors

(Mark L. Stone) #2

I think if you use a vector y, matrix r, producing a vector y-r'*p, and apply norms to it, that ought to do what you want. I leave the details to you.

(dazzy .L) #3

applying norms or the abs operator ??

(Mark L. Stone) #4

You can apply norms so that the result will be a vector of two-norms, with each two-norm being applied in the dimension which has only a single element, which will therefore be the same as abs.

For instance

cvx_begin
variable x(3)
norms(x,[],2)

ans =

cvx convex expression (3x1 vector)

In your case, apply this to the column vector y - r'*p, in place of my x above, where y is a column vector and r is a suitable matrix.

So
norms(y - r'*p,[],2) <= epsilon

(dazzy .L) #5

the right hand side should be the one vector times eps i think , coz we have multiconstraints , and what will the norm give on the left hand side

(Mark L. Stone) #6

Assume there are n constraints.
y is n by 1. p is m by 1. r is m by n (i.e., an m by 1 column for each constraint).
So y - e'*p is an n by 1 vector.
norms(y - r'*p,[],2) is an n by 1 vector, each element of which is the absolute value of the corresponding element of y - r'*p.

The use of `ones(n,1) on the RHS is optional, and is automatically applied in MATLAB and CVX. I omitted it to reduce clutter in the program.

1 Like
(Mark L. Stone) #7

Actually, abs can be used directly as a more straightforward alternative to norms, and will be applied per element, thereby producing a vector output from a vector input.

abs(y - r'*p) <= epsilon

1 Like