The problem-based approach to optimization involves creating optimization variables and expressing the objective and constraints in terms of those variables.
A rational function is a quotient of polynomials. When the objective function is a rational function of optimization variables or other supported function, you can create the objective function expression directly from the variables. In contrast, when your objective function is not a supported function, you must create a MATLAB® function that represents the objective and then convert the function to an expression by using
fcn2optimexpr. See Supported Operations for Optimization Variables and Expressions and Convert Nonlinear Function to Optimization Expression.
For example, write the objective function
in terms of two optimization variables
x = optimvar('x'); y = optimvar('y'); f = (x-y)^2/(4+(x+y)^4)*(x+y^2)/(1+y^2);
To find the minimum of this objective function, create an optimization problem with
f as the objective, set an initial point, and call
prob = optimproblem('Objective',f); x0.x = -1; x0.y = 1; [sol,fval,exitflag,output] = solve(prob,x0)
Solving problem using fminunc. Local minimum found. Optimization completed because the size of the gradient is less than the value of the optimality tolerance.
sol = struct with fields: x: -2.1423 y: 0.7937
fval = -1.0945
exitflag = OptimalSolution
output = struct with fields: iterations: 9 funcCount: 10 stepsize: 1.7073e-06 lssteplength: 1 firstorderopt: 1.4999e-07 algorithm: 'quasi-newton' message: '...' objectivederivative: "reverse-AD" solver: 'fminunc'
The exit flag shows that the reported solution is a local minimum. The output structure shows that the solver took just 30 function evaluations to reach the minimum.