39 views (last 30 days)

Show older comments

The title already described my question. Let me give a specific example:

If I have in my objective function for fmincon to optimize. During the iterations, may be smaller than 0.

Therefore, do I need to write as nonlinear constraints or does Matlab already take account of the problem?

Thank you very much!

Matt J
on 6 Mar 2019

Edited: Matt J
on 6 Mar 2019

You should omit square roots, because they introduce both unneccesary additional computation and non-differentiability into the cost function, which breaks the theoretical assumptions of fmincon. In your example, the problem could be equivalently posed without square roots as

min x^2

s.t. x^2>=100

Matt J
on 7 Mar 2019

Edited: Matt J
on 7 Mar 2019

One general way to get rid of sqrt expressions in the objective is to replace them with an additional nonlinearly constrained variable, e.g., instead of

f=a+b^2+sqrt(-x^3+2*x+99)

have instead,

f=a+b^2+c

s.t. c^2=-x^3+2*x+99

c>=0;

All of the above expressions, both in the objective and the constraints, are now differentiable everywhere.

SandeepKumar R
on 6 Mar 2019

Walter Roberson
on 6 Mar 2019

if you have fractional power of a polynomial (not a multinomial) then manually solve for the bounds and express them as bounds constraints . Bounds constraints are respected in most situations .

You might end up with discontinuous ranges. If so it can often be more efficient to run the ranges as separate problems and take the best solution afterwards . Nonlinear constraints are much less efficient to deal with .

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!