Numpy中的多项式表示及拟合
1. poly1d 类的说明和使用
官方文档的解释:一维多项式类,用于封装多项式上的“自然”运算,以便所述运算可以采用代码中的惯用形式。
参数解释:
c_or_r : array_like
多项式的系数,按照幂的降序排列。如果第二个参数为 `True`,则表示多项式的根。
比如 ``poly1d([1, 2, 3])`` 返回的对象表示:math:`x^2 + 2x + 3`;
而``poly1d([1, 2, 3], True)`` 返回表示:math:`(x-1)(x-2)(x-3) = x^3 - 6x^2 + 11x -6`。
r : bool, optional
如果为 `True`,第一个参数表示多项式的多个根。默认 `False`。
variable : str, optional
改变打印时未知数的表示字符。如:
p = poly1d([1,2], False, varibale='z')
print(p) ====>> 1z + 2
类的方法
# 构造多项式 x^2 + 2x + 4
p = np.poly1d([1,2,4])
__call__(x) 多项式运算
计算多项式 p 在 x 处的值。等价于 np.polyval(p, x)。
p(0.5) # 返回 5.25
p([1,2,3]) # 返回 array([ 7, 12, 28])
deriv(m=1) 求导
返回多项式的m阶导数,返回 poly1d 实例。和函数 np.polyder(p, m)等价。
d = p.deriv()
print(d) # 2x + 2
integ(m=1, k=None)不定积分
返回多项式的 m次 不定积分,返回 poly1d 实例;
k 为每次积分后的常数项,m=1 时可为数字,否则是长度为m的列表。
和函数 np.polyint(p, m, k)等价。
i = p.integ()
print(i) # 0.3333 x^3 + x^2 + 4x
类的属性
p.r 求根
p.c 多项式系数
p.order 多项式的阶
p[n] 第n阶的系数:等于 p[-(n+1)]
p.r # array([-1.+1.73205081j, -1.-1.73205081j])
p.c # array([1, 2, 4])
p.order # 2
p[0] # 4
多项式对象可之间进行常用的数学运算。
2. 多项式拟合
np.polyfit() 方便地进行多项式拟合。采用最小二乘法进行拟合,返回多项式的系数。参数如下:
x : array_like, shape (M,)
M个样本在x轴上的坐标 ``(x[i], y[i])``.
y : array_like, shape (M,) or (M, K)
样本在y轴上的坐标点。如果有多列,每一列分别进行拟合。
deg : int
拟合的多项式的阶
full : bool, optional
决定返回值内容。当是 `False` 时,仅返回多项式的系数,默认 `False`。为 `True` 时,
奇异值分解的诊断信息也将被返回。
其余参数 rcond, w, cov 目前暂未使用到,理解不到位。
使用举例:
# 构造数据并进行拟合
x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])
y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0])
z = np.polyfit(x, y, 3)
print(z)
# >>> array([ 0.08703704, -0.81349206, 1.69312169, -0.03968254]) # may vary
# 使用拟合的多项式
y_ = np.polyval(z, [0.5, 1.5])
pring(y_)
# >>> array([0.61438492, 0.96339286])
3. 参考
主要内容来自对官方文档的翻译,做一记录,加深记忆。
意外知道了Python中类的 __call__() 方法,可直接使用类实例的名称进行调用。
版权声明:本文为u010942902原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。