Python多项式拟合详解:np.polyfit与np.poly1d实战指南

码头散步
码头散步
发布时间:2026-10-13| 6人浏览过
原创

本文深入解析Python中利用NumPy库进行多项式拟合的核心方法。详细讲解np.polyfit函数的最小二乘法原理及参数设置,以及np.poly1d类在构建多项式、求值、求根和系数提取中的应用。通过正弦函数拟合示例,展示从数据生成、模型拟合到可视化绘图的完整流程,帮助开发者高效实现数据趋势分析与函数逼近。

环境准备与数据生成

在Python中进行数据拟合,主要依赖NumPy库的支持。安装该库可通过执行pip install numpy命令完成。

首先准备原始数据。假设需要拟合的数据yyy来源于正弦函数np.sin,具体生成方式如下。


import numpy as np
import matplotlib.pyplot as plt

xxx = np.arange(0, 1000) # x值,此时表示弧度
yyy = np.sin(xxx*np.pi/180) #函数值,转化成度

接下来测试不同阶数的多项式拟合效果,例如采用7阶多项式。使用np.polyfit进行拟合计算,并通过np.poly1d获取对应的多项式系数。


z1 = np.polyfit(xxx, yyy, 7) # 用7次多项式拟合,可改变多项式阶数;
p1 = np.poly1d(z1) #得到多项式系数,按照阶数从高到低排列
print(p1) #显示多项式

随后,计算对应xxx变量下的各项拟合函数值。


yvals=p1(xxx) # 可直接使用yvals=np.polyval(z1,xxx)

最后,将原始数据与拟合结果绘制成图表进行对比展示。


plt.plot(xxx, yyy, '*',label='original values')
plt.plot(xxx, yvals, 'r',label='polyfit values')
plt.xlabel('x axis')
plt.ylabel('y axis')
plt.legend(loc=4) # 指定legend在图中的位置,类似象限的位置
plt.title('polyfitting')
plt.show()

np.polyfit拟合原理与参数

关于np.polyfit函数:该函数基于最小二乘法原理进行拟合。其完整签名numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)中,前三个参数x、y和deg为必填项。

官方文档参考地址:https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.polyfit.html

np.poly1d多项式构建与操作

关于np.poly1d函数:该函数用于生成多项式对象并获取系数,主要涉及三个参数。


 A one-dimensional polynomial class.

  A convenience class, used to encapsulate "natural" operations on
  polynomials so that said operations may take on their customary
  form in code (see Examples).

  Parameters
  ----------
  c_or_r : array_like
    The polynomial's coefficients, in decreasing powers, or if
    the value of the second parameter is True, the polynomial's
    roots (values where the polynomial evaluates to 0). For example,
    ``poly1d([1, 2, 3])`` returns an object that represents
    :math:`x^2 + 2x + 3`, whereas ``poly1d([1, 2, 3], True)`` returns
    one that represents :math:`(x-1)(x-2)(x-3) = x^3 - 6x^2 + 11x -6`.
  r : bool, optional
    If True, `c_or_r` specifies the polynomial's roots; the default
    is False.
  variable : str, optional
    Changes the variable used when printing `p` from `x` to `variable`
    (see Examples).


参数1的含义:当参数2未指定(即默认为False)时,参数1需以数组形式传入,表示从高次到低次的多项式系数。例如,若参数1为[4, 5, 6],则对应的多项式表达式为。

参数2的含义:当参数2设为True时,表示将参数1中的数值视为多项式的根来构建多项式。即若参数1为[4, 5, 6],则生成的多项式满足(x-4)(x-5)(x-6)=0,展开后为。

参数3的含义:用于指定打印时使用的变量名。若习惯使用x,也可通过此参数替换为t、s等其他标识符。

具体用法示例如下。

1. 直接进行代数运算,例如计算多项式的平方,结果分别显示为。


xx=np.poly1d([1,2,3])
print(xx)
yy=xx**2 #求平方,或者用 xx * xx
print(yy)


2. 求值操作:

yy(1) = 36

3. 求根操作:即求解方程等于0时的未知数值。

yy.r

4. 获取系数并形成数组:

yy.c 为:array([ 1, 4, 10, 12, 9])

5. 返回最高次幂数:

yy.order = 4

6. 返回系数列表:

yy[0] —— 表示常数项(幂为0)的系数。

yy[1] —— 表示一次项(幂为1)的系数。

总结

以上介绍了Python中多项式拟合中np.polyfit和np.poly1d的详细用法,希望能为读者提供实用参考,感谢对本站的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。