Create equation problem
specifies additional options using one or more name-value pair arguments. For example, you
can specify equations when constructing the problem by using the
prob
= eqnproblem(Name,Value
)Equations
name.
To solve the nonlinear system of equations
using the problem-based approach, first define x
as a two-element optimization variable.
x = optimvar('x',2);
Create the first equation as an optimization equality expression.
eq1 = exp(-exp(-(x(1) + x(2)))) == x(2)*(1 + x(1)^2);
Similarly, create the second equation as an optimization equality expression.
eq2 = x(1)*cos(x(2)) + x(2)*sin(x(1)) == 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: exp(-exp(-(x(1) + x(2)))) == (x(2) .* (1 + x(1).^2)) eq2: ((x(1) .* cos(x(2))) + (x(2) .* sin(x(1)))) == 0.5
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.8255e-08
exitflag = EquationSolved
View the solution point.
disp(sol.x)
0.3532 0.6061
Unsupported Functions Require fcn2optimexpr
If your equation functions are not composed of elementary functions, you must convert the functions to optimization expressions using fcn2optimexpr
. For the present example:
ls1 = fcn2optimexpr(@(x)exp(-exp(-(x(1)+x(2)))),x); eq1 = ls1 == x(2)*(1 + x(1)^2); ls2 = fcn2optimexpr(@(x)x(1)*cos(x(2))+x(2)*sin(x(1)),x); eq2 = ls2 == 1/2;
For the list of supported functions, see Supported Operations on Optimization Variables and Expressions.
When x
is a 2-by-2 matrix, the equation
is a system of polynomial equations. Here, means 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.
sol = struct with fields:
x: [2x2 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
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
.
prob = eqnproblem('Equations',eqn)
'Equations'
— Problem equations[]
(default) | OptimizationEquality
array | structure with OptimizationEquality
arrays as fieldsProblem equations, specified as an OptimizationEquality
array or structure with
OptimizationEquality
arrays as fields.
Example: sum(x.^2,2) == 4
'Description'
— Problem label''
(default) | string | character vectorProblem 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
prob
— Equation problemEquationProblem
objectEquation 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
.
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.
You have a modified version of this example. Do you want to open this example with your edits?