用python完成多项式拟合曲线

用python完成多项式拟合曲线,第1张

python完成多项式拟合需要用到的库有numpy和matplotlib

曲线拟合的函数在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)

结果如下:

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


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()

运行结果

需要注意的是,如果用于多项式拟合源数据的点数量过少,画曲线时需要自己扩充数据点,不然会画成折线。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/567908.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存