Python多项式拟合详解:np.polyfit与np.poly1d实战指南
本文深入解析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的详细用法,希望能为读者提供实用参考,感谢对本站的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









