2015-09-07 77 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. 

宾果。现在我开始检查你的函数是否在一些输入中进入复杂平面。