Optimization Toolbox | ![]() ![]() |
Nonlinear Systems of Equations
Solving a nonlinear system of equations involves finding a solution such that every equation in the nonlinear system is 0. That is, we have
equations and
unknowns and we want to find
such that
where
The assumption is that a zero, or root, of the system exists. These equations may represent economic constraints, for example, that must all be satisfied.
Gauss-Newton Method
One approach to solving this problem is to use a Nonlinear Least-Squares solver, such those described in Least-Squares Optimization. Since we assume the system has a root, it would have a small residual, and so using the Gauss-Newton Method is effective. In this case, at each iteration we solve a linear least-squares problem, as described in Eq. 3-21, to find the search direction. (See Gauss-Newton Method for more information.)
Trust-Region Dogleg Method
Another approach is to solve a linear system of equations to find the search direction, namely, Newton's method says to solve for the search direction such that
Newton's method can run into difficulties. may be singular, and so the Newton step
is not even defined. Also, the exact Newton step
may be expensive to compute. In addition, Newton's method may not converge if the starting point is far from the solution.
Using trust-region techniques (introduced in Trust-Region Methods for Nonlinear Minimization) improves robustness when starting far from the solution and handles the case when is singular. To use a trust-region strategy, a merit function is needed to decide if
is better or worse than
. A possible choice is
But a minimum of is not necessarily a root of
.
and so it is also a minimum of where
![]() |
(3-24) |
Then is a better choice of merit function than
, and so the trust region subproblem is
![]() |
(3-25) |
such that . This subproblem can be efficiently solved using a dogleg strategy.
For an overview of trust-region methods, see Conn [5], and Nocedal [33].
![]() | Nonlinear Least-Squares Implementation | Nonlinear Equations Implementation | ![]() |