MATLAB® Toolbox Tutorial
This page illustrates how you can solve the following constrained nonlinear optimization problem:
Minimize
x1*x1 + x2*x2
Subject to:
x1 + x2 = 1
x1 * x2 >= 0
0 <= x1, x2 <= 1
using the Solver Platform SDK with its MATLAB Optimization Toolbox compatible API. Click the links below to see example MATLAB code written using the SDK's other APIs.
To solve a constrained nonlinear optimization problem using the Optimization Toolbox API, you must write two MATLAB functions -- one to compute values for the objective (we'll call this objfun), and one to compute values for the constraints (we'll call this confun) -- and then call the fmincon function, passing the addresses of these two functions as arguments. Each MATLAB function is generally placed in a separate M-file.This function computes a value for the objective, given current trial values for the problem variables as chosen by the optimizer:
function f = objfun(x)
f = x(1) * x(1) + x(2) * x(2);
end
This function computes values for the constraints, given current trial values for the problem variables. You must separate the constraints into inequalities (which we'll call c) and equalities (which we'll call ceq). fmincon expects constraints of the form c <= 0 and ceq = 0. Our first constraint is x1 + x2 = 1, so we'll have to subtract 1 to form (x1 + x2 - 1) = 0. Our second constraint is x1 * x2 >= 0, so we must multiply by -1 to form -x1 * x2 <= 0.
function [c, ceq] = confun(x)
ceq = [x(1) + x(2) - 1];
c = [-x(1) * x(2)];
end
Below is the code to call fmincon, passing vectors for the lower and upper bounds on the variables, and the addresses of the two functions above. You must pass the arguments in the correct order, and supply the empty matrix [] for the arguments you are not using.
function Example4
lb = [0; 0];
ub = [1; 1];
x0 = [1; 1];
[x,obj,exitflag] =
fmincon(@objfun,x0,[],[],[],[],lb,ub,@confun,[]);
end
After calling fmincon, you must test the exitflag value to determine whether any error occurred. If the optimization was successful, you can display or otherwise work with obj, the final value of the objective, and the vector x, the final values of the decision variables.