FFIVE
我认为这个图形代码示例可以满足您的需求,使用单个共享参数拟合两个数据集。请注意,如果数据集的长度不等,则可以有效地加权对具有更多单个点的数据集的拟合。此示例将初始参数值显式设置为 1,0 - curve_fit() 默认值 - 并且不使用 scipy 的遗传算法来帮助查找初始参数估计值。import numpy as npimport matplotlibimport matplotlib.pyplot as pltfrom scipy.optimize import curve_fity1 = np.array([ 16.00, 18.42, 20.84, 23.26])y2 = np.array([-20.00, -25.50, -31.00, -36.50, -42.00])comboY = np.append(y1, y2)x1 = np.array([5.0, 6.1, 7.2, 8.3])x2 = np.array([15.0, 16.1, 17.2, 18.3, 19.4])comboX = np.append(x1, x2)if len(y1) != len(x1): raise(Exception('Unequal x1 and y1 data length'))if len(y2) != len(x2): raise(Exception('Unequal x2 and y2 data length'))def function1(data, a, b, c): # not all parameters are used here, c is shared return a * data + cdef function2(data, a, b, c): # not all parameters are used here, c is shared return b * data + cdef combinedFunction(comboData, a, b, c): # single data reference passed in, extract separate data extract1 = comboData[:len(x1)] # first data extract2 = comboData[len(x1):] # second data result1 = function1(extract1, a, b, c) result2 = function2(extract2, a, b, c) return np.append(result1, result2)# some initial parameter valuesinitialParameters = np.array([1.0, 1.0, 1.0])# curve fit the combined data to the combined functionfittedParameters, pcov = curve_fit(combinedFunction, comboX, comboY, initialParameters)# values for display of fitted functiona, b, c = fittedParametersy_fit_1 = function1(x1, a, b, c) # first data set, first equationy_fit_2 = function2(x2, a, b, c) # second data set, second equationplt.plot(comboX, comboY, 'D') # plot the raw dataplt.plot(x1, y_fit_1) # plot the equation using the fitted parametersplt.plot(x2, y_fit_2) # plot the equation using the fitted parametersplt.show()print('a, b, c:', fittedParameters)