Как подобрать кусочную функцию и сделать кусочную точку непрерывной, а первая производная кусочной функции - равной? - PullRequest
0 голосов
/ 17 января 2019

Когда я хочу использовать кусочную функцию для подгонки моих данных, я не знаю, как понять, что подобранная функция непрерывна в точке останова, а ее первая производная равна, то есть сглаживает кусочную функцию.

Я пытался подгонять данные по отдельности, но, как показано на рисунке, я не знал, как добавить ограничения в процесс подбора.

enter image description here

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 производная от точки останова равна, но после долгого размышления функция подгонки сплайна не может работать, потому что моя кусочная функция имеет ограниченную выражение, эта проблема беспокоила меня в течение многих дней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...