导数可以说是研究函数行为最有用的数学工具。
在这篇文章中,我们将介绍计算机计算导数的三种方法。
为了简单起见,我们将只讨论单变量函数。但是,同样的概念也适用于处理多元函数。
导数是什么?
函数的导数表示函数值随参数的微小变化而变化的速率。
我们定义一个函数f(x)在点x0处的导数:

视觉上,f(x)的导数是:任意x0切线的斜率:


应用这个定义,我们可以找到简单函数导数的一般表达式,如多项式、指数、三角函数等。
因此,我们推出了两种计算导数的方法:
通过某一点x₀,根据定义
利用已知函数的导数表达式和链式法则
下面,我们将从计算的角度探讨每种方法
数值微分
如前面所述,第一种方法意味着使用有限差分法计算某个点x₀处近似导数的值:
为了实现这个方法,我们选择一个小的h(接近于零)计算分数

优点
这种方法在函数未知且只能采样时很有用。
缺点
根据步骤h的选择,结果的精度会受到或多或少的影响。
当涉及到高阶导数和多变量函数时,数值微分就成了问题。
符号微分
第二种计算导数的方法是通过反复应用链式法则和已知的简单函数的导数公式来处理数学表达式。

通过这样做,我们找到了导数(f’(x)=…)的一般表达式,在这个表达式中,我们可以插入x₀来找到某个特定点的值。
例如,让我们在x₀=1时求下列函数的导数:

利用定义,我们可以证明:

那么,通过链式法则,我们有

接下来,插入x₀=1可以得到

优点
由于计算是象征性的,精度问题减少了。
缺点
正如预期的那样,如果我们正在研究的函数非常复杂,符号微分就会变得非常繁琐,尤其是在处理多元函数和/或高阶导数时。