Nonlinear systems nlsolve alternative non convergence issue

When working with nonlinear systems in Julia, it is not uncommon to encounter issues with non-convergence. This can be frustrating, as it prevents us from obtaining the desired solution. However, there are several ways to tackle this problem and improve the convergence of the nlsolve algorithm.

Option 1: Adjusting the Initial Guess

One possible reason for non-convergence is an inappropriate initial guess. The nlsolve algorithm starts the iteration process from this initial guess, and if it is too far from the true solution, it may fail to converge. Therefore, adjusting the initial guess can often improve convergence.


using NLsolve

function my_function!(F, x)
    F[1] = x[1]^2 - 2
    F[2] = x[2]^2 - 3
end

x0 = [1.0, 1.0]  # Adjust the initial guess here

result = nlsolve(my_function!, x0)

Option 2: Modifying the Tolerance

Another reason for non-convergence could be a too strict convergence tolerance. By default, nlsolve uses a tolerance of 1e-8, which may not be appropriate for all problems. Increasing the tolerance can sometimes help the algorithm converge.


using NLsolve

function my_function!(F, x)
    F[1] = x[1]^2 - 2
    F[2] = x[2]^2 - 3
end

x0 = [1.0, 1.0]

result = nlsolve(my_function!, x0, ftol=1e-6)  # Modify the tolerance here

Option 3: Providing Analytical Jacobian

In some cases, the nlsolve algorithm may struggle to converge due to the absence of an analytical Jacobian. By default, nlsolve approximates the Jacobian numerically, which can be less efficient. Providing an analytical Jacobian can significantly improve convergence.


using NLsolve

function my_function!(F, x)
    F[1] = x[1]^2 - 2
    F[2] = x[2]^2 - 3
end

function my_jacobian!(J, x)
    J[1, 1] = 2x[1]
    J[1, 2] = 0
    J[2, 1] = 0
    J[2, 2] = 2x[2]
end

x0 = [1.0, 1.0]

result = nlsolve(my_function!, my_jacobian!, x0)

After trying out these three options, it is evident that providing an analytical Jacobian yields the best results in terms of convergence. It allows the algorithm to make more informed decisions during the iteration process, leading to faster and more accurate convergence. Therefore, if possible, it is recommended to provide an analytical Jacobian when using the nlsolve algorithm in Julia.

Rate this post

Leave a Reply

Your email address will not be published. Required fields are marked *

Table of Contents