Dear all,

Working on some related topics, I’ve realized that the `mcpsolver`

provided by the `NLsolve`

package is struggling to find the solution(s) to non-monotonic functions.

As an example, say we are looking for the `x`

’s which solve `(x^3 + x^2 - 20x - 8)/6 - 3 = 0`

, subject to the constraint `x >= 0`

. Graphically, this looks like

```
function f!(x,fvec)
fvec[1] = (x[1]^3 + x[1]^2 - 20x[1] - 8)/6 - 3
end
NLsolve.mcpsolve(f!, [0.], [Inf], [0.], reformulation = :smooth, autodiff = true) # returns -1.48382
NLsolve.mcpsolve(f!, [0.], [Inf], [0.], reformulation = :minmax, autodiff = true) # returns -1.0
NLsolve.mcpsolve(f!, [0.], [Inf], [0.], reformulation = :smooth, autodiff = true, method = :newton) # returns 6.25915e8
```

First, the solver returns negative value, even though the constraint indicates that `x`

needs to be positive. Second, it does not find the root at 4.6.

I was wondering whether this is because the root is actually complex-valued. And if not, whether there would be a way to find this root, without changing the initial condition.

Thanks a lot for the help.