Main Content

Problem-Based Workflow for Solving Equations


Optimization Toolbox™ provides two approaches for solving equations. This topic describes the problem-based approach. Solver-Based Optimization Problem Setup describes the solver-based approach.

To solve a system of equations, perform the following steps.

  • Create an equation problem object by using eqnproblem. A problem object is a container in which you define equations. The equation problem object defines the problem and any bounds that exist in the problem variables.

    For example, create an equation problem.

    prob = eqnproblem;
  • Create named variables by using optimvar. An optimization variable is a symbolic variable that you use to describe the equations. Include any bounds in the variable definitions.

    For example, create a 15-by-3 array of variables named 'x' with lower bounds of 0 and upper bounds of 1.

    x = optimvar('x',15,3,'LowerBound',0,'UpperBound',1);
  • Define equations in the problem variables. For example:

    sumeq = sum(x,2) == 1;
    prob.Equations.sumeq = sumeq;


    If you have a nonlinear function that is not composed of polynomials, rational expressions, and elementary functions such as exp, then convert the function to an optimization expression by using fcn2optimexpr. See Convert Nonlinear Function to Optimization Expression and Supported Operations for Optimization Variables and Expressions.

    If necessary, include extra parameters in your equations as workspace variables; see Pass Extra Parameters in Problem-Based Approach.

  • For nonlinear problems, set an initial point as a structure whose fields are the optimization variable names. For example:

    x0.x = randn(size(x));
    x0.y = eye(4); % Assumes y is a 4-by-4 variable
  • Solve the problem by using solve.

    sol = solve(prob);
    % Or, for nonlinear problems,
    sol = solve(prob,x0)

In addition to these basic steps, you can review the problem definition before solving the problem by using show or write. Set options for solve by using optimoptions, as explained in Change Default Solver or Options.


The problem-based approach does not support complex values in the following: an objective function, nonlinear equalities, and nonlinear inequalities. If a function calculation has a complex value, even as an intermediate value, the final result might be incorrect.


All names in an optimization problem must be unique. Specifically, all variable names, objective function names, and constraint function names must be different.

For a basic equation-solving example with polynomials, see Solve Nonlinear System of Polynomials, Problem-Based. For a general nonlinear example, see Solve Nonlinear System of Equations, Problem-Based. For more extensive examples, see Systems of Nonlinear Equations.

See Also

| | | | | |

Related Topics