# [Scipy-tickets] [SciPy] #1644: scipy.optimize.fmin_bfgs not handling functions with boundaries that go infinite or very large correctly

SciPy Trac scipy-tickets@scipy....
Tue Apr 17 15:02:45 CDT 2012

```#1644: scipy.optimize.fmin_bfgs not handling functions with boundaries that go
infinite  or very large correctly
----------------------------+-----------------------------------------------
Reporter:  jsalvatier      |       Owner:  somebody
Type:  defect          |      Status:  new
Priority:  normal          |   Milestone:  Unscheduled
Component:  scipy.optimize  |     Version:  0.10.0
Keywords:                  |
----------------------------+-----------------------------------------------
Here's the toy problem I've set up:

from scipy.optimize import fmin_bfgs, fmin_ncg
from numpy import *
import numpy as np

def f(x ):
if x < 0:
return 1.79769313e+308
else :
return x + 1./x

xs = fmin_bfgs(f, array( [10.]), retall = True)

The solver returns [nan] as the solution.

The problem is designed to be stiff: between 0 and 1, it slopes upward to
infinity but between 1 and infinity, it slopes up at a slope of 1. Left of
0 the function has a "nearly infinite" value. If bfgs encounters  a value
that's larger than the current value, it should try a different step size,
no?

user/2012-April/032088.html

It seems that what was actually happening is that in line_search_wolfe2,
calling scalar_search_wolfe2 calling _zoom calling _cubicmin was returning
a NaN if you add a test at the end of _cubicmin testing for a NaN (and
then returning None), it finds the right minimum. It looks like _quadmin
probably would have the same problem.

--
Ticket URL: <http://projects.scipy.org/scipy/ticket/1644>
SciPy <http://www.scipy.org>
SciPy is open-source software for mathematics, science, and engineering.
```