



多项式是数学中最简单的函数之一,其定义为单项式的和:
这里, x 代表一个待替换的占位符(一个不定项),而 a i 是一个系数。由于多项式非常简单,它是简要介绍微积分的绝佳工具。
在本节中,我们将定义一个简单的表示多项式的类,并为该类编写执行微分和积分的方法。
本节不需要额外的软件包。
以下步骤将介绍如何创建表示多项式的类,并为该类实现微分和积分方法。
1.让我们先定义一个简单的类来表示多项式:
2.既然我们已经定义了多项式的基本类,那么接下来就可以为这个polynomial类实现微分和积分运算,以说明这些运算是如何改变多项式的。我们从微分开始,将元素索引序号与当前系数列表(去除第一个元素)的每个元素相乘,生成新的系数。我们使用这个新的系数列表创建一个新的polynomial实例并返回:
3.为了实现积分方法,我们需要创建一个新的系数列表,其中包含由参数给定的新常数(为保持一致,将其转换为浮点数)。然后,我们将旧系数除以它们在列表中的新位置,添加到这个系数列表中:
4.最后,为了确保这些方法能按预期工作,我们用一个简单的案例来测试这两种方法。我们可以用一个非常简单的多项式来检验,比如 x 2 -2 x +1:
这里的导数系数为-2和2,对应于多项式-2
x
+2
x
2
,这实际上是
x
2
-2
x
+1的导数。同样,积分的系数对应于多项式
,这也是正确的(积分常数
C
=1)。
多项式为微积分的基本运算提供了简单介绍,但为其他一般函数构建Python类却不那么容易。尽管如此,多项式还是非常有用的,因为它们很好理解,更重要的是多项式的微积分非常简单。对于变量 x 的幂,微分的规则是乘以幂,然后将幂函数的指数减1,这样 x n 就变成了 nx n -1 ,所以多项式微分的规则是简单地将每个系数乘以它的位置(即幂次),并去除第一个系数。
积分更为复杂,因为函数的积分并不是唯一的。我们可以在积分中加入任意常数,得到第二个积分。对于变量
x
的幂,积分规则是将幂指数增加1,然后除以新的幂,这样
x
n
就变成了
。因此,要对多项式进行积分,我们需要将每个幂次加1,并将相应的系数除以新的幂次。因此,我们的规则是首先插入新的积分常数作为第一个元素,然后将现有的每个系数除以它在列表中的新位置。
我们在这个示例中定义的Polynomial类相对简单,但代表了核心思想。一个多项式可以由其系数唯一确定,我们可以将这些系数存储为数值列表,对这个系数列表进行微分和积分运算。我们提供了一个简单的_repr_方法来帮助显示Polynomial对象,并提供了调用方法_call_,以方便对特定数值进行求值,这里主要演示了多项式的求值方式。
多项式对于解决某些涉及高计算成本的函数求值问题非常有用。对于这类问题,我们有时可以使用某种形式的多项式插值,将多项式拟合到另一个函数上,然后利用多项式的性质来帮助解决原始问题。多项式计算的成本远低于原始函数,因此这可以显著提高计算速度。通常情况下,这是以牺牲一定的精度为代价的。例如,辛普森法则用二次多项近似函数曲线,通过三个连续点所在区间上的曲线下面积近似原函数的定积分。每个二次多项式的曲线下面积都能通过积分很容易地计算出来。
多项式在计算程序设计中的作用远不止演示微分和积分的效果这么简单。因此,NumPy包中提供了一个更丰富的Polynomial类numpy.polynomial。NumPy的Polynomial类和各种派生子类在各种数值问题中都很有用,并支持算术运算和其他方法。特别地,有很多方法可以将多项式拟合到数据集合上。
NumPy还提供从Polynomial派生的类,用于表示各种特殊类型的多项式。例如,Legendre类表示一种称为勒让德多项式的特定多项式系统。Legendre多项式定义为满足-1≤ x ≤1并形成正交的系统,这对于数值积分和求解偏微分方程的 有限元法 等应用非常重要。Legendre多项式是利用递归关系定义的,其定义如下:
此外,对于 n ≥2,我们定义 n 阶勒让德(Legendre)多项式满足以下递推关系:
还有其他几种所谓的正交(系统)多项式,包括拉盖尔(Laguerre)多项式、切比雪夫(Chebyshev)多项式和埃尔米特(Hermite)多项式。
微积分在数学课本中肯定有很好的论述,有许多教科书涵盖了从基本方法到深层理论的所有内容。多项式正交系统在数值分析课本中也有大量记载。