Когда я хочу использовать кусочную функцию для подгонки моих данных, я не знаю, как понять, что подобранная функция непрерывна в точке останова, а ее первая производная равна, то есть сглаживает кусочную функцию.
Я пытался подгонять данные по отдельности, но, как показано на рисунке, я не знал, как добавить ограничения в процесс подбора.
def func(x, a0, a1,a2):
return a0+(a1/x)+a2/(x*x)
def highfunc(x1,b0,b1,b2):
return b0+b1*x1+b2*x1*x1
x=speed_low
y=ddma_low
popt, pcov = curve_fit(func, x, y)
a0=popt[0]
a1=popt[1]
a2=popt[2]
yvals = func(x,a0,a1,a2) #拟合y值
x1=speed_high
y1=ddma_high
popt1, pcov1 = curve_fit(highfunc, x1, y1)
b0=popt1[0]
b1=popt1[1]
b2=popt1[2]
yvals1 = highfunc(x1,b0,b1,b2) #拟合y值
xxxxx=np.hstack((x,x1))
yyyyy=np.hstack((yvals,yvals1))
#########################画图####################################
fig, ax = plt.subplots()
levels=np.linspace(0,3,7)
gci=ax.hist2d(Good_ddma,speed_cygnss,bins=400,cmap="jet",norm=LogNorm())
plot2 = plt.scatter(yvals,x,s=0.8,c='k',label='polyfit values')
plot3 = plt.scatter(yvals1,x1,s=0.8,c='r',label='polyfit values')
plot4 = plt.scatter(eeeeeefffff,windspeed_queue,s=20,c='k',marker='+')
Две линии, которые я хочу разместить, являются гладкими и непрерывными, то есть первая enter code here
производная от точки останова равна, но после долгого размышления функция подгонки сплайна не может работать, потому что моя кусочная функция имеет ограниченную выражение, эта проблема беспокоила меня в течение многих дней.