python拟合曲线_Python 做拟合后如何让折线变为平滑曲线,用 1d 插值拟合后曲率变大...

代码如下

import matplotlib.pyplot as plt

import numpy as np

x = [1,5,30,200]

y = [27,12,7,5]

x = np.array(x)

y = np.array(y)

# x = np.arange(1, 17, 1)

# y = np.array([4.00, 6.40, 8.00, 8.80, 9.22, 9.50, 9.70, 9.86, 10.00, 10.20, 10.32, 10.42, 10.50, 10.55, 10.58, 10.60])

z1 = np.polyfit(x, y, 3)#用 3 次多项式拟合

p1 = np.poly1d(z1)

print(p1) #在屏幕上打印拟合多项式

yvals=p1(x)#也可以使用 yvals=np.polyval(z1,x)

plot1=plt.plot(x, y, '*',label='original values')

plot2=plt.plot(x, yvals, 'r',label='polyfit values')

plt.xlabel('x axis')

plt.ylabel('y axis')

plt.legend(loc=1)#指定 legend 的位置,读者可以自己 help 它的用法

plt.title('polyfitting')

plt.show()

使用插值拟合后,产生一个波峰一个波谷,我只想要个平滑的曲线,不知道有啥好办法

fq1 = interp1d(x, y1, kind='quadratic')

fq2 = interp1d(x, y2, kind='zero')

下面代码是一个粘度曲线测试程序,请参考程序运行结果

import numpy as np

from scipy.interpolate import interp1d

#创建待插值的数据

# x = np.linspace(0, 10*np.pi, 20)

# y = np.cos(x)

x = [1,5,30,200]

# x = [1,100,150,200]

y = [27,12,7,5]

x = np.array(x)

y = np.array([27,12,7,5])

# 分别用 linear 和 quadratic 插值

fl = interp1d(x, y, kind='linear')

fq = interp1d(x, y, kind='quadratic')

#设置 x 的最大值和最小值以防止插值数据越界

xint = np.linspace(x.max(), x.min(), 200)

y1 = np.array([21.350,11,6.62,5.05])

y2 = np.array([15.630,8.31,5.18,3.53])

# x1 = np.array([50,150,200])

# xint1 = np.linspace(x1.min(), x1.max(), 110)

yintl = fl(xint)

yintq = fq(xint)

fq1 = interp1d(x, y1, kind='quadratic')

fq2 = interp1d(x, y2, kind='zero')

import pylab as pl

fig, ax = pl.subplots()

# make ticks and tick labels

# xticks = range(min(x), max(x) + 1, 3)

# xticks = range(1, 200 + 50,30)

xticklabels = [1,3,10,"",30,100,200]

# #设置网格样式

# ax.set_xticks(xticks)

ax.set_xticklabels(xticklabels, rotation=0)

ax.grid(True, linestyle='-.',color="b")

yfq2=fq2(xint)

yfq1=fq1(xint)

# pl.plot(xint,fl(xint), color="green", label = "Linear")

pl.plot(xint,fq(xint), color="red", label ="Quadratic")

pl.plot(xint,yfq1, "b--", label ="QuadraticL")

pl.plot(xint,yfq2, color="green", label ="QuadraticH")

x3= np.array([1,5,30,200])

y3 = np.array([27,12,7,5])

pl.plot(x3,y3,"b-", label ="QuadraticZ")

pl.legend(loc = "best")

pl.ylim(1,50,10)

pl.xlim(0,200,70)

pl.show()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值