Python 将共享相同参数的两个函数拟合到数据

Python 将共享相同参数的两个函数拟合到数据,python,scipy,curve-fitting,scipy-optimize,minimization,Python,Scipy,Curve Fitting,Scipy Optimize,Minimization,假设我有两个函数描述同一范围(x轴)内的一个现象。两者共享相同的参数,但也可以有自己的参数。如何立即使用SciPy或Lmfit>>对它们进行拟合或将误差降至最低我不完全确定从中得到的值是否符合您的目标,但为什么不使用第三个函数调用前两个函数并返回结果的平均值呢 #一些半随机数据 扩展数据_1=np.linspace(-200200100) ydata_1=200*np.random.random(100)+np.linspace(-10100100) 扩展数据_2=np.linspace(502

假设我有两个函数描述同一范围(x轴)内的一个现象。两者共享相同的参数,但也可以有自己的参数。如何立即使用SciPy或Lmfit>>对它们进行拟合或将误差降至最低我不完全确定从中得到的值是否符合您的目标,但为什么不使用第三个函数调用前两个函数并返回结果的平均值呢

#一些半随机数据
扩展数据_1=np.linspace(-200200100)
ydata_1=200*np.random.random(100)+np.linspace(-10100100)
扩展数据_2=np.linspace(50250100)
ydata_2=200*np.random.random(100)-(xdata_2**2/100)#linspace(100,-1000,100)
#拟合函数
def fit1(x、p1、p2):
返回p1*x+p2
def fit2(x、p1、p2、p3):
返回p1*x**2+p2*x+p3
#此函数调用两个拟合函数并返回平均结果
def安装概述(x、p1、p2、p3):
y1=fit1(x,p1,p2)
y2=fit2(x,p1,p2,p3)
返回(y1+y2)/2
#现在适合组合数据集
扩展数据=np.连接((扩展数据1,扩展数据2))
ydata=np.连接((ydata_1,ydata_2))
popt,pcov=曲线拟合(拟合常规、扩展数据、ydata)
#绘制结果
plotrange=np.linspace(-200250100)
plt.散射(扩展数据1,ydata 1)
plt.散射(扩展数据2,ydata 2)
plt.plot(plotrange,fit_-general(plotrange,*popt),color='k')
plt.网格(α=0.4)
结果图:

不过,我怀疑这对滞后模型是否有效


如果数学上可能的话,使用一个将x和y都作为输入的单一函数(请参见),或者使用极坐标或单一参数曲线(有点类似于此模型:)将拟合函数重写为拟合,也可能很有用.

如果两个实验结果的x轴相同,并且您希望在输出时两个函数f1、f2只有一组参数,那么为什么不合并这两个实验数据集,只使用一个函数,即f1和f2的乘积(f1*f2)。它应该给出适当的优化和一组参数

与asdfCYBER显示的类似,但是f3是两个的平均值,我将使用f3=f1*f2

def f1(x_val, p1, p2, p3):
    some_code_1

def f2(x_val, p1, p2, p4):
    some_code_2

exp_data_1 = np.loadtxt("./mydata1.txt")
exp_data_x1 = exp_data_1[:,0]
exp_data_y1 = exp_data_1[:,1]

exp_data_2 = np.loadtxt("./mydata2.txt")
exp_data_x1 = exp_data_1[:,0]
exp_data_y1 = exp_data_1[:,1]

xxx = np.linspace(0, 1, 1000)
popt, pcov = curve_fit((f1,f2), (exp_data_y1, exp_data_y2), xxx)