2016-10-04 19 views
0

我想找到函數的局部最小值f(x) = x^3 + x^2 + x - 2 其中x是在<-10; 10>之間。我在Windows 64bit上使用Anaconda 3。Scipy最小化標量與布倫特方法拋出溢出34

我SciPy的Python代碼拋出一個錯誤:

from scipy import optimize 
def f(x): 
    return (x**3)+(x**2)+x-2 
x_min = optimize.minimize_scalar(f, bounds=[-10, 10], method='brent') 

OverflowError: (34, 'Result too large')

是不是權力3過於簡單的功能,打破了SciPy的優化包?

+1

根據minimize_scalar'的'文檔,如果你想限制內'bounds'的解決方案,你應該使用'方法=「有限「'。顯然,'brent'方法不尊重,因爲你的函數的邊界和休息是無界的 – Stelios

+0

就是這樣,你可以把它寫成一個解決方案@Stelios,我會接受它 – oski86

+0

我會很感激一個提示,爲何布倫特不能應用在這裏,我找不到爲什麼'''x^2'''與Brent合作的答案,而3的權力不會。 – oski86

回答

1

當使用地方的界限,改變method'bounded'需要

from scipy import optimize 
def f(x): 
    return (x**3)+(x**2)+x-2 
x_min = optimize.minimize_scalar(f, bounds=[-10, 10], method='bounded') 
print(x_min)