NLsolve and OffsetArrays

Does the package NLsolve support the use of OffsetArrays?
It looks to me it does not.

``````using NLsolve
using OffsetArrays

function f!(F,x)
F[1] = 3*x[1]-cos(x[2]*x[3])-1/2
F[2] = x[1]^2-81*(x[2]+0.1)^2+sin(x[3])+1.06
F[3] = exp(-x[1]*x[2])+20*x[3]+(10*π-3)/3
end

function g!(F,x)
F[0] = 3*x[0]-cos(x[1]*x[2])-1/2
F[1] = x[0]^2-81*(x[1]+0.1)^2+sin(x[2])+1.06
F[2] = exp(-x[0]*x[1])+20*x[2]+(10*π-3)/3
end

function iterativeExperiments()
x0 = [0.1,0.1,-0.1]
nlsolve(f!,x0)
end

function iterativeExperimentsOffset()
x0 = OffsetArray([0.1,0.1,-0.1],0:2)
nlsolve(g!,x0)
end

``````

the functions `f!` and `g!` do exactly the same thing, but one is written with an offset, starting from 0.
However

``````julia> iterativeExperiments()
Results of Nonlinear Solver Algorithm
* Algorithm: Trust-region with dogleg and autoscaling
* Starting Point: [0.1, 0.1, -0.1]
* Zero: [0.5000000000003627, 3.977133147909994e-11, -0.5235987755972586]
* Inf-norm of residuals: 0.000000
* Iterations: 5
* Convergence: true
* |x - x'| < 0.0e+00: false
* |f(x)| < 1.0e-08: true
* Function Calls (f): 6
* Jacobian Calls (df/dx): 6
``````

while

``````julia> iterativeExperimentsOffset()
ERROR: BoundsError: attempt to access 3-element OffsetArray(::Array{Float64,1}, 0:2) with eltype Float64 with indices 0:2 at index [3]
``````

(plus `stacktrace`)

If I am not mistaken there is not an easy solution. One could mutate things back to standard arrays and move it back again but this is terrible.
Is there a more elegant solution?

The `OffsetArray` constructor is just a thin wrapper, so if you prefer to write code the above way, just wrap the arguments and use the result. Eg

``````function f!(F_orig,x_orig)
x = OffsetArray(x_orig, 0:3) # same for F
... # previous code here
end
``````