Wolfram 语言的新功能:增强的求导功能

2018-05-31 10:42:07 浏览数 (1)

函数的导数在微积分及其应用中起着至关重要的作用。尤其是可以用来研究曲线的几何形状、求解优化问题和构建在物理、化学、生物和金融领域提供数学模型的微分方程。函数 D 可以计算 Wolfram 语言中各种类型的导数,是系统中最常用的函数之一。我写这篇帖子的目的是向你介绍版本 11.1 中 D 的令人兴奋的新功能,让我们从导数的简单历史介绍开始。

导数的概念最先被 Pierre de Fermat (1601–1665) 和其他十七世纪的数学家使用,用来求解类似曲线在某个点处的切线这样的问题。给定曲线 y=f(x),如下图所示,他们将点 {x,f(x)} 处的切线视为当“无穷小”量 h 趋于 0 时,经过附近点 {x,f(x h)} 绘制到该点的割线的极限位置。

下面对他们的方法进行解释。 连接 {x,f(x)} 和 {x h,f(x h)} 的割线的斜率由 DifferenceQuotient 给出。

现在假定函数 f(x) 的定义如下:

那么连接 {x,f(x)} 和 {x h,f(x h)} 的割线的斜率为:

当时的数学家接下来通过把 h 设为 0 来求切线的斜率:

下面所示的动画显示了利用上述斜率公式求得的切线沿曲线变化的情况:

在简单的例子中,直接把无穷小量 h 设为 0 是可行的,但要求有相当的创造能力来计算某些较难例子中差商的极限值。实际上,Isaac Barrow (1630–1677) 和其他人采用了几何方法来计算各种曲线的极限值。另一方面,Wolfram 语言内置的 Limit 函数采用了基于无穷级数展开式的方法,可用来计算所要求的极限值。例如,假设我们想要求 Sin 的导数。首先要计算函数的差商。

接下来,我们注意到直接把 h 设为 0 会出现一个 Indeterminate 表达式。Quiet 函数被用来禁止显示关于不确定性的警告信息。

尽管直接替换的方法行不通,我们仍然可以使用 Limit 来推导出 Sin[x] 的导数是 Cos[x]。

接着说导数的历史发展,大约 1670 年前后,由于引入了导数和积分的一般概念,为这两个运算制定了简便的符号,并确定它们是互为逆运算的,艾萨克·牛顿和 Gottfried Wilhelm Leibniz 被认为"发现"了微积分。然而,在这些开拓者的工作中,无穷小量的使用依旧笼罩在一层神秘的色彩中。在 1734 年发表的文章 The Analyst 中,Bishop Berkeley 把无穷小量称为"已死量的幽灵"(ghosts of departed quantities),嘲讽当时的数学家是"习惯于计算而不是思考的人"(men accustomed rather to compute, than to think)。同时,微积分为物理学提供了大量的成功模型,比如振荡运动的波动方程。这些成功促使数学家们寻找在导数中使用极限的严格定义,最终,Augustin-Louis Cauchy 于 1823 年完成了这个使命。 Cauchy 和后来的数学家,尤其是 Karl Weierstrass (1815–1897) 的工作使关于微积分的基础的争论从此平息。在此之后,数学家可以用纯代数的方法处理导数,不再担心计算极限带来的巨大工作量。更准确一点,现在,导数的计算被简化成两套规则:一个是计算个别函数的导数,如 Sin,另一个是求这些函数的和、积或相互复合构成的函数的导数。这正是 D 所实现的求导数的代数方法,允许我们用如下所示的一行输入直接计算 Sin 的导数:

从函数的导数开始,我们可以计算更高阶的导数,以便对该函数所描述的物理现象有更深的了解。例如,假设沿直线运动的粒子在时刻 t 的位置 s(t) 的定义如下:

那么,粒子的速度和加速度将分别由一阶和二阶导数给出。用 D 可以很容易地计算出更高阶的导数;它们还有特殊的名称,从下面的计算中可以看出来:

回到最开始的例子,计算 Sin 的前四阶导数:

我们可以看到一个清晰的模式,即通过对 x 加上 π /2 的倍数就可以获得这些导数:

在 11.1 版中,D 返回了 Sin 的 n 阶导数的这个公式:

一个上述解析式的直接用法就是高速计算函数的高阶导数。D 采用这种方法用版本 11.1 以闪电般的速度算出了 Sin 的第十亿阶导数:

Wolfram 语言拥有各种各样的数学函数,包括从诸如 Power 的基本函数到 EllipticE 这样的高级特殊函数。在版本 11.1 中,许多这些函数的 n 阶导数都可以通过 D 用解析式算出来。下面的表中列出了这些漂亮复杂的公式,每一个都把计算给定函数的高阶导数的信息囊括其中。

表中的有些项相当简单。比如,第一条表明指数函数的所有导数都等于函数自身,概述了来自基本微积分学的结果:

与此形成鲜明对比的是,ArcTan 的 n 阶导数由一个含有 HypergeometricPFQRegularized 的看起来就觉得很复杂的表达式给出。

如果我们现在给定公式中 n 的值,可以获得前几个导数的答案。

这些答案与用 D 分别求每个导数所得到的答案相同。对结果进行简化:

微积分中熟悉的和、积以及链式法则可以被优美地推广到求 n 阶导数的情况。求和法则是最简单的,和的 n 阶导数就是 n 阶导数的和。

乘积法则,或者是所谓的莱布尼兹法则给出的答案则是一个二项展开式,将其表示为封装在 Inactive 中的和以避免被计算。

设 n=1,并应用 Activate 计算上述处于非活动状态的表达式,我们可以从一阶导数中恢复乘积法则。

最后,是源自虔诚的意大利牧师 Francesco Faà di Bruno (1825–1888) 的链式法则。这由一个用 BellY 函数表示的复杂表达式给出,即: 同样,通过设 n=1,很容易得到一阶导数的链式法则。

Wolfram 语言中的特殊函数通常都以族出现,用整数或其他参数标识族中的不同成员。例如,对于每个整数 n 都有一个 BesselJ[n,z] 函数。下图所示为该族函数的前四个成员(贝塞尔函数的正弦特性可以帮助我们模拟圆形薄膜)。

事实证明,可以用其他贝塞尔函数来表示 BesselJ[n,z] 的导数。早期的版本的确使用了一些这种关系,版本 11.1 更充分地利用了这种关系以返回更精简的答案,下面的例子说明了这一点,在早期版本中这个例子产生了 210=1024 个 BesselJ 函数!

到目前为止,我们讨论的函数都是可微的,因为对于变量的所有值它们都有导数。绝对值函数提供了一个不可微函数的标准例子,它在原点处没有导数。不幸的是,内置的 Abs 函数是为复数定义的,因此在任何点都没有导数。版本 11.1 克服了这个限制,引入了 RealAbs,对于实数来讲与 Abs 一样,下面的图可以说明这一点。

该函数对所有值都有导数,除原点之外,下面给出了该函数:

RealAbs 的引入肯定受到了长期寻求这样的函数以便用在微分方程和其他应用中的用户的欢迎。

该实绝对值函数是连续的,只有个别处不可微,但是,在 1872 年,Karl Weierstrass 引入了一个分形函数,处处连续但是处处不可微,由此震惊了整个数学界。版本 11.1 引入了几个这种类型的分形曲线,按它们的发现命名。下面绘制了几个这些曲线的近似。

阿尔伯特·爱因斯坦在 1916 年宣告广义相对论的论文中提供了发展微积分学的强大动力。在这篇划时代的论文中,他系统性地使用了由Gregorio Ricci (1853–1925) 和他的学生 Tullio Levi-Civita (1873–1941) 研究出来的张量微积分来构建引力场理论,现在已被引力波探测的结果所证实。KroneckerDelta 张量,其名称源自用于表示它的希腊字符 δ,在张量微积分中起着重要的作用。

KroneckerDelta 的重要性在于允许我们"筛选"张量并很容易地分离个别项。为了理解这个概念,让我们先通过应用 PiecewiseExpand 获取该张量的定义。

从上面可以看出如果 i 和 j 相等,则 KroneckerDelta[i, j] 等于 1,否则等于 0。因此,我们可以把下面的和中的所有项筛选一遍,并选择第三项 f(3)。

版本 11.1 中,D 利用 KroneckerDelta 的这个属性来对有符号上限的有限和关于指标变量 x(j) 进行微分,说明如下:

最后的结果表明导数中只有第 j 项不为 0,因为其他项都不依赖于 x(j),所以它们相对于该变量的导数都为 0。例如,如果我们设 n=5, j=2,那么和就会简化成一个项 f′(x(2))。

除了对 D 函数功能的改进外,版本 11.1 还对该重要功能的文档进行了全面的更新。参考文档页面现在包含了许多在普通大学微积分课程中会遇到的类型的应用实例。这些实例是一群聪明的实习生在 2016 年夏天,从 5000 多本教科书的习题中选出,并利用 Wolfram 语言完成求解的。下面显示了其中一些例子的图形。这三幅图中都是 D 的文档中相应的实例。

D 是一个从版本 1.0 (1988) 开始就有的函数。我们希望版本 11.1 带来的该函数的增强功能会为其增色,从而吸引更多用户使用它。欢迎大家就新功能提出意见和反馈。

0 人点赞