曲线拟合优化scipy python numpy

2024-09-27 07:18:13 发布

您现在位置:Python中文网/ 问答频道 /正文

这篇文章建立在我之前的问题上

我有一些X数据和一些Y数据,Y数据可以拟合为X数据的加权和,我的问题是找到最适合的系数。在

我现在明白了一种方法来做到这一点,尽管我意识到这可能不是最好或最佳的方法。在

然而,我所拥有的X数据有时可能会被移位,这样只有在X的每一列上下移动N个增量之后,才能获得最佳拟合。在

我想看看np.滚动可以用来做这个,但我卡住了,因为我的函数现在需要系数和整数值np.滚动可用于将列上下移动N以提高拟合度。在

我想我的主要问题是我不明白如何将这两种不同的参数传递给curvefit-有可能吗?在

也许吧np.滚动不是最好的办法吗?因此,如果有任何其他建议,我们也将不胜感激。在

在下面的示例中,将第二列移动-1将产生更好的扩展数据与Ydata的匹配。在

xdata = np.array([[1.0, 1.0],[1.0, 1.0], [2.0, 3.0], [4.0, 2.0], [2.0, 1.0],[1.0, 1.0]])

ydata = np.array([3.0, 5.0, 6.0, 9.0, 5.0, 3.0])


def fitfunc(xdata, *params):
    ctx = 0.0

    # y is not yet defined by somehow I would like it to take the values passed in the second np.array defined in c below
    # the for loop should just run twice in this example

    for n in range(len(params)): 
        ctx = params[n]*np.roll(xdata[:,n], y, axis=0) + ctx  
    return ctx, y

#initial guesses for fitting parameters
c = (np.array([0.6, 0.3]), np.array([1, 1])) # the second np.array is what I would like to pass a y's 

# fit data using SciPy's Levenberg-Marquart method
nlfit, nlpcov = scipy.optimize.curve_fit(fitfunc, xdata, ydata, p0=(c), sigma=None)

print (nlfit) 

谢谢你的帮助


Tags: the数据方法inforisnpparams
1条回答
网友
1楼 · 发布于 2024-09-27 07:18:13

curve_fit需要一个参数数组,您可以在fitfunc中使用它。在这个例子中,我们有p列,每个列都有一个斜率和一个移位,所以最后我们需要一个2*p元素的参数数组。初始参数数组需要如下所示:

c = np.array([0.6, 0.3, 1, 1])

fitfunc中,我将参数数组拆分为:

  • slope_params,一个斜率参数数组,使用params[:cols],它接受第一个p元素,并且
  • shift_params,一个移位参数数组,使用params[cols:],它接受最后一个p元素。在

fitfunc的完整代码:

^{pr2}$

注意,我们必须使用[int(round(n)) for n in params[cols:]]将移位参数转换为整数。在

将其与curve_fit一起使用根本不会更改移位参数,并给出警告:

(0.59999999999999998, 0.29999999999999999, 1.0, 1.0)
(0.59999999999999998, 0.29999999999999999, 1.0, 1.0)
(0.59999999999999998, 0.29999999999999999, 1.0, 1.0)
(0.60000000894069672, 0.29999999999999999, 1.0, 1.0)
(0.59999999999999998, 0.30000000447034836, 1.0, 1.0)
(0.59999999999999998, 0.29999999999999999, 1.0000000149011612, 1.0)
(0.59999999999999998, 0.29999999999999999, 1.0, 1.0000000149011612)
(-0.40816307558733345, 3.6326528012731845, 1.0, 1.0)
(-0.40816306950522968, 3.6326528012731845, 1.0, 1.0)
(-0.40816307558733345, 3.6326528554039292, 1.0, 1.0)
(-0.40816307558733345, 3.6326528012731845, 1.0000000149011612, 1.0)
(-0.40816307558733345, 3.6326528012731845, 1.0, 1.0000000149011612)
(-0.40816327556523363, 3.632653071646589, 1.0, 1.0)
OptimizeWarning: Covariance of the parameters could not be estimated
  category=OptimizeWarning)
[-0.40816328  3.63265307  1.          1.        ]

您可能可以调整优化设置以获得更好的结果,但我不认为这是解决您的问题的最有希望的方法。在

相关问题 更多 >

    热门问题