Rational Objective Function, Problem-Based - MATLAB & Simulink (original) (raw)
Main Content
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
f=(x-y)24+(x+y)4x+y21+y2
in terms of two optimization variables x
and y
.
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 solve
.
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
exitflag = OptimalSolution
output = struct with fields: iterations: 9 funcCount: 10 stepsize: 1.7073e-06 lssteplength: 1 firstorderopt: 1.4999e-07 algorithm: 'quasi-newton' message: 'Local minimum found.↵↵Optimization completed because the size of the gradient is less than↵the value of the optimality tolerance.↵↵↵↵Optimization completed: The first-order optimality measure, 7.499390e-08, is less ↵than options.OptimalityTolerance = 1.000000e-06.' 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.