用python完成多项式拟合曲线

用python完成多项式拟合需要用到的库有numpymatplotlib

曲线拟合的函数在numpy库中:

polyfit(x,y,n)
  • x 为源数据点对应的横坐标,可为行向量、矩阵
  • y 为源数据点对应的纵坐标,可为行向量、矩阵
  • n 为你要拟合的阶数
  • 返回值为多项式系数
poly1d(an)
  • 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)

结果如下:
结果1

polyval(an,x)
  • 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


# 源数据点的x,y坐标
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()

运行结果
结果2

注意

  • 如果用于多项式拟合源数据的点数量过少,会画成折线。如下图:

    请添加图片描述

  • 扩充数据点的x坐标要与源数据点的区间相同,步长取小即可。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值