【发布时间】:2021-12-30 08:39:17
【问题描述】:
我会尽量解释清楚。我想拟合一个非线性函数,以最小化与其他 2 条曲线的距离。
This picture explains this better
我想通过将橙色曲线乘以一个高度非线性的函数来修改橙色曲线(比如说“损坏”它)。如您所见,拟合曲线是绿色的,我现在没有问题。
最小化函数的形状如下:
def func_to_minimize(input_X, c1, c2, c3):
xdata, orange_points_in_y = input_X
damage = non_linear_function(xdata, c1, c2, c3)
return np.multiply(damage, orange_points_in_y)
因此,以这种方式应用curve_fit,我得到了正确的c1、c2和c3参数来获得两条红色曲线之间的绿色曲线:
(c1,c2,c3), pcov = curve_fit(func_to_minimize, (xdata, orange_points_in_y), ydata)
green_y_points = np.multiply(non_linear_function(xdata, c1, c2, c3), orange_points_in_y)
由于我有多个数据集(2 条 x 值相同但 y 值不同的曲线),我将数据堆叠成一维数组:
xdata = np.concatenate((xdata,xdata))
ydata = np.concatenate((ydata_1,ydata_2))
orange_points_in_y = np.concatenate((orange_points_in_y, orange_points_in_y))
出现问题是因为我有不止 1 条这样的曲线(超过 1 个“区域”),但它们都需要同时配备一组独特的 c1、c2、c3 参数。使用新图像您会更好地理解它:
在这张图片中,您可以看到石灰曲线,它是通过获取 2 组参数(每个区域一组)获得的。但是当我尝试同时拟合所有内容时,我得到了深绿色曲线,这显然是不正确的。为了提供curve_fit,我像以前一样同时连接所有数据,确保所有点彼此对应。
如果有人知道如何获得这组独特的参数,即使使用其他算法,我也将不胜感激。谢谢你的时间:)
【问题讨论】:
标签: python scipy curve-fitting nonlinear-optimization