Finding minimum/maximum of a multi-variable function under some constraints using matlab.

7.4k Views Asked by At

I have a function $f(x,y,z)$ I want to find the minimum/maximum of the function with some constraints like

$$0 < x < C_1$$ $$0 < y+z <C_2$$

where $C_1$ and $C_2$ are some integer constants.

Right now the function that I have is $ax + by + cz\;$ ($a,$ $b$ and $c$ are constants). But is there a generic way to do this in Matlab.

1

There are 1 best solutions below

4
On BEST ANSWER

You can use linprog (help page has good examples):

x = linprog(f,A,b,Aeq,beq,lb,ub) defines a set of lower and upper bounds on the design variables, x, so that the solution is always in the range lb ≤ x ≤ ub. Set Aeq = [] and beq = [] if no equalities exist.

f, x, b, beq, lb, and ub are vectors, and A and Aeq are matrices.

So

f = [a; b; c]

lb = []

ub = []

Aeq = []

beq = []

We need to setup the constraints in a matrix format $A{\mathbf x} \le b -\epsilon$. Separate $0 < x < c$ into $-x < 0,$ and $x < c,$ etc. Subtract eps to $-x < 0 -\epsilon,$ etc. So $$ \begin{pmatrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 1 & 1 \\ 0 & -1 & -1 \end{pmatrix} \begin{pmatrix} x \\ y \\ z \end{pmatrix} \le \begin{pmatrix} c_1 -\epsilon \\ 0 -\epsilon \\ c_2 -\epsilon \\ 0 -\epsilon \end{pmatrix} $$ Now, we can invoke: linprog.