4. 多项式

  1. 一元多项式类的构造:(注意系数按照次数从高次到低次排列)

    1. class numpy.poly1d(c_or_r, r=0, variable=None)
    • c_or_r:一个数组或者序列。其意义取决于r
    • r:布尔值。如果为True,则c_or_r指定的是多项式的根;如果为False,则c_or_r指定的是多项式的系数
    • variable:一个字符串,指定了打印多项式时,用什么字符代表自变量。默认为x

    多项式的属性有:

    • .coeffs属性:多项式的系数
    • .order属性:多项式最高次的次数
    • .variable属性:自变量的代表字符

    多项式的方法有:

    • .deriv(m=1)方法:计算多项式的微分。可以通过参数m指定微分次数
    • .integ(m=1,k=0)方法:计算多项式的积分。可以通过参数m指定积分次数和k积分常量

    poly1d

  2. 操作一元多项式类的函数:

    • 多项式对象可以像函数一样,返回多项式的值
    • 多项式对象进行加减乘除,相当于对应的多项式进行计算。也可以使用对应的numpy.polyadd/polysub/polymul/polydiv/函数。
    • numpy.polyder/numpy.polyint:进行微分/积分操作
    • numpy.roots函数:求多项式的根(也可以通过p.r方法)

    poly_op

  3. 使用np.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)函数可以对一组数据使用多项式函数进行拟合(最小均方误差)。其参数为:

    • x:数据点的x坐标序列
    • y:数据点的y坐标序列。如果某个x坐标由两个点,你可以传入一个二维数组。
    • deg:拟合多项式的次数
    • rcond:指定了求解过程中的条件:当某个特征值/最大特征值<rcond时,该特征值被抛弃
    • full:如果为False,则仅仅返回拟合多项式的系数;如果为True,则更多的结果被返回
    • w:权重序列。它对y序列的每个位置赋予一个权重
    • cov:如果为True,则返回相关矩阵。如果fullTrue,则不返回。

    默认情况下,返回两个数组:一个是拟合多项式的系数;另一个是数据的相关矩阵

    poly_fit

  4. numpy提供了更丰富的多项式函数类。注意其中的多项式的系数按照次数从小到大排列。

    • numpy.polynomial.Polynomial:一元多次多项式
    • numpy.polynomial.Chebyshev:切比雪夫多项式
    • numpy.polynomial.Laguerre:拉盖尔多项式
    • numpy.polynomial.Legendre:勒让德多项式
    • numpy.polynomial.Hermite:哈米特多项式
    • numpy.polynomial.HermiteEHermiteE多项式

    所有的这些多项式的构造函数为: XXX(coef, domain=None, window=None)。其中XXX为多项式类名。domain为自变量取值范围,默认为[-1,1]window指定了将domain映射到的范围,默认为[-1,1]

    如切比雪夫多项式在[-1,1]上为正交多项式。因此只有在该区间上才能正确插值拟合多项式。为了使得对任何区域的目标函数进行插值拟合,所以在domain指定拟合的目标区间。

    所有的这些多项式可以使用的方法为:

    • 四则运行
    • .basis(deg[, domain, window]):获取转换后的一元多项式
    • .convert(domain=None, kind=None, window=None):转换为另一个格式的多项式。kind为目标格式的多项式的类
    • .degree():返回次数
    • .fit(x, y, deg[, domain, rcond, full, w, window]):拟合数据,返回拟合后的多项式
    • .fromroots(roots[, domain, window]):从根创建多项式
    • .has_samecoef(other).has_samedomain(other).has_sametype(other).has_samewindow(other):判断是否有相同的系数/domain/类型/window
    • .roots():返回多项式的根
    • .trim([tol]):将系数小于 tol的项截掉
    • 函数调用的方式

    ![poly_fit](../imgs/library/poly/poly_fit.JPG)

  5. 切比雪夫多项式可以降低龙格现象。所谓龙格现象:等距离差值多项式在两个端点处有非常大的震荡,n越大,震荡越大。