0
$\begingroup$

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

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.

  • 0
    By "generic" do you mean you want a method which will work for a not necessarily linear function? As far as I know, algorithms usually find only local maxima/minima.2012-04-03
  • 0
    yes that is what i mean by generic2012-04-04

1 Answers 1

2

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.

  • 0
    Hi, I looked at the documentation of `fmincon` here (http://www.mathworks.com/help/toolbox/optim/ug/fmincon.html). It says that fmincon is for **non-linear** functions.2012-04-04
  • 1
    @Ankit Ops, then use `linprog` (http://www.mathworks.com/help/toolbox/optim/ug/linprog.html) and specify all your inequalities the same way I described.2012-04-04
  • 0
    can you please update the answer to include linprog so that I can accept the answer.2012-04-04
  • 0
    Done. Updated my answer.2012-04-04