用python完成多项式拟合需要用到的库有numpy和matplotlib
曲线拟合的函数在numpy库中: polyfit(x,y,n)- x 为源数据点对应的横坐标,可为行向量、矩阵
- y 为源数据点对应的纵坐标,可为行向量、矩阵
- n 为你要拟合的阶数
- 返回值为多项式系数
- an为一个数组,即多项式系数
- 只传入一个参数情况下,则生成一个多项式
例如
import numpy as np
x = np.arange(-1.5, 1.6, 0.5)
y = [-4.45, -0.45, 0.55, 0.05, -0.44, 0.54, 4.55]
an = np.polyfit(x, y, 3)
print(an)
p1 = np.poly1d(an)
print(p1)
结果如下:
- an 为多项式系数
- x 为源数据点对应的横坐标,可为行向量、矩阵
- 返回值为通过多项式计算后的源数据点的纵坐标
画曲线
最后利用matplotlib库中的pyplot完成绘制曲线
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False
def main():
x = np.arange(-1.5, 1.6, 0.5)
y = [-4.45, -0.45, 0.55, 0.05, -0.44, 0.54, 4.55]
an = np.polyfit(x, y, 3) # 用3次多项式拟合
x1 = np.arange(-1.5, 1.6, 0.1) # 画曲线用的数据点
yvals = np.polyval(an, x1)
plt.plot(x, y, '*', label='原数据点')
plt.plot(x1, yvals, 'r', label='拟合后')
plt.xlabel('x 轴')
plt.ylabel('y 轴')
plt.legend(loc=4) # 指定legend的位置
plt.title('曲线拟合')
plt.show()
if __name__ == '__main__':
main()
运行结果
需要注意的是,如果用于多项式拟合源数据的点数量过少,画曲线时需要自己扩充数据点,不然会画成折线。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)