# 概述
**autodiff** 是一款使用现代和先进编程技术的 C++17 库。
技术可实现在高效、简单的方式自动计算导数。
而且方式直观。
## 演示
考虑以下函数 *f(x, y, z)*:
```c++
double f(double x, double y, double z)
{
return (x + y + z) * exp(x * y * z);
}
```
我们使用它来评估变量 *u = f(x, y, z)*:
```c++
double x = 1.0;
double y = 2.0;
double z = 3.0;
double u = f(x, y, z);
```
我们如何尽可能地转换此代码,使不仅 *u*,而且其
是否可以计算导数 *∂u/∂x*、 *∂u/∂y* 和 *∂u/∂z*?
接下来的两节将介绍如何通过两个自动化方法实现这一点。
在 **autodiff** 中实现的差分算法: **前向模式** 和
**反向模式**。
### 前向模式
在前向自动微分算法中,输出变量和其中一个或多个导数一起计算。例如,函数评估f(x, y, z)可以通过转换,不仅生成输出变量u的值,还可以生成其对输入变量*(x, y, z)的一个或多个导数(∂u/∂x, ∂u/∂y, ∂u/∂z)*。
现在,我们可以如下计算导数 ∂u/∂x、 ∂u/∂y 和 ∂u/∂z: