# eqnproblem

Create equation problem

## Description

example

prob = eqnproblem creates an equation problem with default properties.

example

prob = eqnproblem(Name,Value) specifies additional options using one or more name-value pair arguments. For example, you can specify equations when constructing the problem by using the Equations name.

## Examples

collapse all

To solve the nonlinear system of equations

$\begin{array}{l}\mathrm{exp}\left(-\mathrm{exp}\left(-\left({x}_{1}+{x}_{2}\right)\right)\right)={x}_{2}\left(1+{x}_{1}^{2}\right)\\ {x}_{1}\mathrm{cos}\left({x}_{2}\right)+{x}_{2}\mathrm{sin}\left({x}_{1}\right)=\frac{1}{2}\end{array}$

using the problem-based approach, first define x as a two-element optimization variable.

x = optimvar('x',2);

Create the left side of the first equation. Because this side is not a polynomial or rational function, process this expression into an optimization expression by using fcn2optimexpr.

ls1 = fcn2optimexpr(@(x)exp(-exp(-(x(1)+x(2)))),x);

Create the first equation.

eq1 = ls1 == x(2)*(1 + x(1)^2);

Similarly, create the left side of the second equation by using fcn2optimexpr.

ls2 = fcn2optimexpr(@(x)x(1)*cos(x(2))+x(2)*sin(x(1)),x);

Create the second equation.

eq2 = ls2 == 1/2;

Create an equation problem, and place the equations in the problem.

prob = eqnproblem;
prob.Equations.eq1 = eq1;
prob.Equations.eq2 = eq2;

Review the problem.

show(prob)
EquationProblem :

Solve for:
x

eq1:
arg_LHS == (x(2) .* (1 + x(1).^2))

where:

anonymousFunction1 = @(x)exp(-exp(-(x(1)+x(2))));
arg_LHS = anonymousFunction1(x);

eq2:
arg_LHS == 0.5

where:

anonymousFunction2 = @(x)x(1)*cos(x(2))+x(2)*sin(x(1));
arg_LHS = anonymousFunction2(x);

Solve the problem starting from the point [0,0]. For the problem-based approach, specify the initial point as a structure, with the variable names as the fields of the structure. For this problem, there is only one variable, x.

x0.x = [0 0];
[sol,fval,exitflag] = solve(prob,x0)
Solving problem using fsolve.

Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the value of the function tolerance, and
the problem appears regular as measured by the gradient.
sol = struct with fields:
x: [2x1 double]

fval = struct with fields:
eq1: -2.4069e-07
eq2: -3.8253e-08

exitflag =
EquationSolved

View the solution point.

disp(sol.x)
0.3532
0.6061

When x is a 2-by-2 matrix, the equation

${\mathit{x}}^{3}=\left[\begin{array}{cc}1& 2\\ 3& 4\end{array}\right]$

is a system of polynomial equations. Here, ${x}^{3}$ means $x*x*x$ using matrix multiplication. You can easily formulate and solve this system using the problem-based approach.

First, define the variable x as a 2-by-2 matrix variable.

x = optimvar('x',2,2);

Define the equation to be solved in terms of x.

eqn = x^3 == [1 2;3 4];

Create an equation problem with this equation.

prob = eqnproblem('Equations',eqn);

Solve the problem starting from the point [1 1;1 1].

x0.x = ones(2);
sol = solve(prob,x0)
Solving problem using fsolve.

Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the value of the function tolerance, and
the problem appears regular as measured by the gradient.

<stopping criteria details>
sol = struct with fields:
x: [2×2 double]

Examine the solution.

disp(sol.x)
-0.1291    0.8602
1.2903    1.1612

Display the cube of the solution.

sol.x^3
ans = 2×2

1.0000    2.0000
3.0000    4.0000

## Input Arguments

collapse all

### Name-Value Pair Arguments

Specify optional comma-separated pairs of Name,Value arguments. Name is the argument name and Value is the corresponding value. Name must appear inside quotes. You can specify several name and value pair arguments in any order as Name1,Value1,...,NameN,ValueN.

Example: prob = eqnproblem('Equations',eqn)

Problem equations, specified as an OptimizationEquality array or structure with OptimizationEquality arrays as fields.

Example: sum(x.^2,2) == 4

Problem label, specified as a string or character vector. The software does not use Description for computation. Description is an arbitrary label that you can use for any reason. For example, you can share, archive, or present a model or problem, and store descriptive information about the model or problem in Description.

Example: "An iterative approach to the Traveling Salesman problem"

Data Types: char | string

## Output Arguments

collapse all

Equation problem, returned as an EquationProblem object. Typically, to complete the problem description, you specify prob.Equations and, for nonlinear equations, an initial point structure. Solve a complete problem by calling solve.

### 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.