You can pass additional parameters to the nonlinear constraint function as well as objective function using anonymous functions, inline functions, or function files for the objective and constraint functions. An example of this is given below.
Anonymous functions allow you to parameterize your objective and constraint functions.
The objective function "fun" can be defined in a function file:
function f = fun(x,p1)
f = -x(1) * x(2) * x(3)*p1;
The nonlinear constraint function "nonlcon" is :
function [c, ceq] = nonlcon(x,p1,p2)
c(1) = x(1)*p1 + 2*x(2)*x(1)*p2 + 2*x(3) - p2;
c(2) = x(1)*x(2)-100;
ceq(1) = x(2) -x(1)*x(2);
ceq(2) = x(2) - x(1)*x(3);
The call to FMINCON where the additional parameter P1 is passed to the objective function, and parameters P1 and P2 to the constraint function is:
x0 = [10; 10; 10];
p1 = 1;
p2 = 72;
lb = [0 0 0];
ub = [ 50 50 50];
options = optimset('Largescale','off','Display','iter');
[x, fval] = fmincon(@(x)fun(x,p1), x0, , , , , lb, ub, @(x)nonlcon(x,p1,p2), options)
For simple objective functions, it is possible to define the objective function in the call to FMINCON, and have no objective function file:
[x, fval] = fmincon(@(x)-x(1)*x(2)*x(3)*p1, x0, , , , , lb, ub, @(x)nonlcon(x,p1,p2), options)
The ODE functions use the same convention for handling additional parameters as is described here. Additional information about the ODE solvers can be found in the related solution below.