【Python】Numpy处理多项式类Polynomial

文章介绍了Numpy的多项式模块,特别是Polynomial类的使用,包括如何构造多项式、求导和积分、求根、反演、采样及拟合。Polynomial类提供了丰富的函数,如deriv()和integ()进行微分和积分,roots()求根,fromroots()根据根生成多项式,以及fit()进行多项式拟合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

构造函数

Numpy中提供了多项式模块,里面封装了一些用以快速解决多项式问题的类和函数,其中最重要类的自然是Polynomial,其构造函数为

class numpy.polynomial.polynomial.Polynomial(coef, domain=None, window=None, symbol='x')

其中coef为多项式的系数,例如 4 + 3 x + 2 x 2 + x 3 4+3x+2x^2+x^3 4+3x+2x2+x3可写为

from numpy.polynomial import polynomial as poly
p3 = poly.Polynomial(coef=[4,3,2,1])
print(p3)
# 输出为4.0 + 3.0 x**1 + 2.0 x**2 + 1.0 x**3

domian x x x的定义域,window为定义域的放缩因子;symbol为多项式的自变量符号,默认为x

求导和积分

Polynomial支持简单的符号计算,比如可通过deriv(n)求多项式的n阶导数;通过integ(n)可求n阶积分。

>>> p3.deriv(1)
Polynomial([3., 4., 3.], domain=[-1.,  1.], window=[-1.,  1.])
>>> p3.deriv(3)     # 3阶导数为6
Polynomial([6.], domain=[-1.,  1.], window=[-1.,  1.])
>>> p3.integ(2)
Polynomial([0.        , 0.        , 2.        , 0.5       , 0.16666667,  0.05      ], domain=[-1.,  1.], window=[-1.,  1.])

求根和反演

roots可用于求根,而fromroot可根据根来生成多项式

rs = p3.roots()
print(rs)
# [-1.65062919+0.j  
# -0.1746854 -1.54686889j 
# -0.1746854 +1.54686889j]
pNew = p3.fromroots(rs)
print(pNew)
#(4.000000000000001-1.1102230246251565e-16j) +
#(3.0000000000000018+0j) x**1 + (1.9999999999999991+0j) x**2 + (1+0j) x**3

由于浮点计算会引入误差,所以fromroot并不是严格意义上root的逆过程,但这个误差是极小的。

采样与拟合

通过linspace可以在定义域范围内对多项式进行采样,

import matplotlib.pyplot as plt
xs, ys = p3.linspace()
plt.plot(xs, ys)
plt.show()

效果为

在这里插入图片描述

linspace有一个参数n,表示在定义域范围内等间隔生成n x , y x,y x,y,默认为100。

Polynomial类中最强大的函数非fit莫属,其功能是基于最小二乘法的多项式拟合,定义为

Polynomial.fit(x, y, deg, domain=None, rcond=None, full=False, w=None, window=None, symbol='x')

其中domain, window, symbol不必赘述,其中x,y为待拟合多项式;deg为多项式的阶数。rcond表示截止误差。fullFalse时,只返回拟合系数,否则还返回拟合的标准差等。

>>> p3.fit(xs, ys, 3)
Polynomial([4., 3., 2., 1.], domain=[-1.,  1.], window=[-1.,  1.])
>>> p3.fit(xs, ys, 4)
Polynomial([ 4.0000000e+00,  3.0000000e+00,  2.0000000e+00,  1.0000000e+00,
       -9.6550042e-15], domain=[-1.,  1.], window=[-1.,  1.])

其他方法

degree返回多项式的最高项次数,cutdeg可以对多项式的次数做截断,例如

>>> p3.degree()
3
>>> p3.cutdeg(2)
Polynomial([4., 3., 2.], domain=[-1.,  1.], window=[-1.,  1.])

Polynomial类提供了一些用于比较的函数,相当于是运算符重载的补充,包括

  • has_samecoef
  • has_samedomain
  • has_sametype
  • has_samewindow

其命名很直观,不必多言。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值