## Problem-Based Workflow for Solving Equations

**Note**

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;

**Note**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.

**Warning**

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

**Note**

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

`fcn2optimexpr`

| `optimvar`

| `solve`

| `optimoptions`

| `eqnproblem`

| `show`

| `write`