2015-09-07 81 views
0

儘管我經常訪問這裏,但這是我的第一篇文章,請原諒我沒有正確格式化。Scipy曲線擬合:提供的函數不返回有效的浮點數

我試圖在一個方程上使用Scipy曲線擬合,似乎只對一小組輸入信號很好。我目前無法發佈圖片,但下面是基本等式的鏈接。當我嘗試曲線擬合該方程時,我得到「錯誤:提供的函數不返回有效的浮點數」。我對python還不是很有經驗,但是我猜測出於某種原因,Curve Fit正在採取太大的步驟並進入NaN領域?

http://i.stack.imgur.com/2PaJ3.gif

我一直對這個問題有一段時間了,並但我已經跑出去的想法。我做錯了嗎?還是有另一個我應該試試的技巧/工具?

這裏是另一個鏈接到GitHub上的筆記本電腦。如果您有興趣,請在標題「2.曲線擬合」中向下滾動一下。

https://github.com/JAmarel/LiquidCrystals/blob/master/ElectroOptics/PandaImportExcelSheets.ipynb

感謝您考慮看看。

+0

我發現[lmfit](http://lmfit.github.io/lmfit-py/)對於擬合輸入的某些值的模型非常有用 - 它比scipy模塊強大得多。另外,如果您有單獨的分子和分母,則還應該使用雙參數[arctan2](http://docs.scipy.org/doc/numpy/reference/generated/numpy.arctan2.html)。 – chthonicdaemon

回答

0

在這種情況下,通常最好從一個能夠再現錯誤的小玩具問題開始。

此特定錯誤可能來自this line。雖然神祕,但它試圖將函數的輸入轉換爲浮點數組(NPY_DOUBLE),並在失敗時拋出錯誤。

OK,這裏是如何引發的錯誤:

In [3]: import numpy as np 

In [4]: from scipy.optimize import curve_fit 

In [5]: x = np.array([1.0, 2., 3, 4.]) 

In [6]: y = x 

In [7]: def f(x, a):      # try a nan 
    ...:  return np.nan 
    ...: 

In [9]: curve_fit(f, x, y, 2.0) 
/home/br/virtualenvs/scipy-dev/local/lib/python2.7/site-packages/scipy/optimize/minpack.py:604: OptimizeWarning: Covariance of the parameters could not be estimated 
    category=OptimizeWarning) 
Out[9]: (array([ 2.]), array([[ inf]])) 

不,nan我國農產品一些不同的輸出。讓我們嘗試一個字符串:

In [10]: def g(x, a): 
    ....:  return 'nonsense' 
    ....: 

In [11]: curve_fit(g, x, y, 2.0) 
<snip> 
TypeError: unsupported operand type(s) for -: 'str' and 'numpy.ndarray' 

另外不同的錯誤。好吧,讓我們試一下複數:

In [12]: def h(x, a): 
    ....:  return 1j 
    ....: 

In [13]: curve_fit(h, x, y, 2.0) 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
TypeError: Cannot cast array data from dtype('complex128') to dtype('float64') according to the rule 'safe' 
<snip> 

error: Result from function call is not a proper array of floats. 

賓果。現在我開始檢查你的函數是否在一些輸入中進入複雜平面。