Python Scipy曲线拟合:提供的函数不返回有效的浮点值

Python Scipy曲线拟合:提供的函数不返回有效的浮点值,python,numpy,scipy,Python,Numpy,Scipy,虽然我经常访问这里,但这是我的第一篇帖子,如果格式不正确,请原谅 我试图在一个方程上使用Scipy曲线拟合,这个方程似乎只适用于一小部分输入。我还不能发布图片,但下面是一个基本公式的链接。当我尝试曲线拟合该方程时,我得到“错误:提供的函数不返回有效的浮点”。我对python还不是很有经验,但我猜出于某种原因,曲线拟合需要太多的步骤,并且运行到一个NaN区域 这个问题我已经研究了一段时间了,但我已经没有主意了。我是做错了还是有其他的技巧/工具需要我去尝试 这里是github上笔记本的另一个链接。

虽然我经常访问这里,但这是我的第一篇帖子,如果格式不正确,请原谅

我试图在一个方程上使用Scipy曲线拟合,这个方程似乎只适用于一小部分输入。我还不能发布图片,但下面是一个基本公式的链接。当我尝试曲线拟合该方程时,我得到“错误:提供的函数不返回有效的浮点”。我对python还不是很有经验,但我猜出于某种原因,曲线拟合需要太多的步骤,并且运行到一个NaN区域

这个问题我已经研究了一段时间了,但我已经没有主意了。我是做错了还是有其他的技巧/工具需要我去尝试

这里是github上笔记本的另一个链接。如果您感兴趣,向下滚动大约一半至标题“2.曲线拟合”


感谢您的关注。

在这种情况下,通常最好从一个小玩具问题开始,它会再现错误

这个特定的错误可能来自于。虽然很神秘,但它试图将函数的输入转换为一个浮点数组(NPY_DOUBLE),如果失败,则抛出一个错误

好的,下面是如何触发错误:

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
s产生一些不同的输出。让我们尝试一个字符串:

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'
[10]中的
def g(x,a):
..:返回“胡说八道”
....: 
[11]:曲线拟合(g,x,y,2.0)
TypeError:-:“str”和“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.
[12]中的
:def h(x,a):
..:返回1j
....: 
[13]:曲线拟合(h,x,y,2.0)
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
TypeError:无法根据“安全”规则将数组数据从dtype('complex128')强制转换为dtype('float64')
错误:函数调用的结果不是正确的浮点数组。
宾果。现在,我将开始检查函数是否在某些输入的复杂平面内游移。

我发现对于拟合因某些输入值而中断的模型非常有用-它比scipy模块更健壮。另外,如果你有一个单独的分子和分母,你也应该使用两个参数。