Construct optimisation constraints vector with anonymous function.

Asked by Afonso Silva

Afonso Silva (view profile)

on 18 Aug 2015
Latest activity Edited by blaat

blaat (view profile)

on 18 Aug 2015
Hi, I am using Opti tools to optimise a nonlinearly constrained function. According to the tutorial, non-linear constraints are declared through an anonymous function such as: nlcon = @(x) x(1).^3 + 2*x(2) It happens that my optimisation problem is quite big, so all my linear constraints were constructed using a basic 'for' routine. However, I failed doing the same with anonymous functions. How can I sequentially add new nonlinear constraints to nlcon?
Here is a simple example of what I woul like to do:
While i < k
nlnon(i) = @(x) x(1).^3 + 2*x(2)
if c >z
nlnon(i+1) = @(x) x(4).^9 + 2
else
nlnon(i+1) = @(x) x(4).^2 + 2
end
i = i+2;
k = k+1;
end
Thank you, Best Regards

on 18 Aug 2015
Edited by blaat

blaat (view profile)

on 18 Aug 2015

You can also call functions within an anonymous function, e.g.,
param1 = 6;
param2 = 0.5;
nlcon = @(x)calculateconstraint(x, param1, param2);
So place the computation for your constraint in a function (e.g., calculateconstraint), and refer to it as above.