文章

从变化率理解求导、微分与积分

从变化率理解求导、微分与积分

从变化率理解求导、微分与积分

这篇文档从一个简单角度理解三个概念:

1
2
3
4
5
求导 = 求局部的瞬时变化率.

微分 = 描述微小变化量之间的关系.

积分 = 把连续的微小贡献累加起来.

三者不是互相独立的概念, 而是可以连成一条完整的关系。


1. 求导: 求瞬时变化率 ( 我在这里变化得有多快? )

核心用途是:

知道系统在当前位置的”变化趋势和变化速度”.

假设:

\[y=x^2\]

现在想知道 $x$ 变化时, $y$ 变化得有多快。

先让 $x$ 从:

\[x\]

变化到:

\[x+h\]

那么 $y$ 从:

\[x^2\]

变化到:

\[(x+h)^2\]

这一小段范围内, $y$ 的平均变化率是:

\[\frac{(x+h)^2-x^2}{h}\]

展开:

\[\frac{x^2+2xh+h^2-x^2}{h}\]

得到:

\[2x+h\]

现在让:

\[h\to0\]

就得到:

\[2x\]

所以:

\[\frac{\mathrm{d}y}{\mathrm{d}x}=2x\]

也可以写成:

\[y'(x)=2x\]

因此:

导数表示某一个位置上的瞬时变化率。

例如 $x=3$ 时:

\[\frac{\mathrm{d}y}{\mathrm{d}x}=6\]

表示在 $x=3$ 附近, $x$ 每发生一点变化, $y$ 大约以 6 倍的速度变化。


2. 微分: 描述微小变化之间的关系 ( 如果我改变这么一点, 结果大约改变多少? )

核心用途是:

根据输入的微小变化, 估计输出会发生多少变化.

已经知道:

\[\frac{\mathrm{d}y}{\mathrm{d}x}=2x\]

可以写成:

\[\mathrm{d}y=2x \, \mathrm{d}x\]

这里:

$\mathrm{d}x$ 表示 $x$ 的微小变化。

$\mathrm{d}y$ 表示这个变化对应产生的 $y$ 的微小变化。

因此:

\[\mathrm{d}y=2x \, \mathrm{d}x\]

可以理解成:

当 $x$ 发生微小变化 $dx$ 时, $y$ 对应产生微小变化 $\mathrm{d}y$。

例如 $x=3$ 时:

\[\mathrm{d}y=6 \, \mathrm{d}x\]

可以直观理解成:

1
2
3
4
5
x 微小变化 1 份

        ↓

y 微小变化约 6 份

所以目前可以简单地把微分理解成:

微分描述各个微小变化量之间的关系。


3. 求导和微分的关系

导数 = 变化比例.

微分 = 按照这个变化比例, 一个微小输入会产生多少微小输出.

导数和微分来自同一个局部变化规律, 只是关注的信息不同。

导数关注: $\frac{\mathrm{d}x}{\mathrm{d}y}$

即: 变化比例是多少?

微分关注: $\mathrm{d}y=f′(x) \, \mathrm{d}x$

即: 给定一个微小输入变化 $\mathrm{d}x$, 会产生多少输出变化 $\mathrm{d}y$?

对于:

\[y=x^2\]

求导得到:

\[\frac{\mathrm{d}y}{\mathrm{d}x}=2x\]

它描述的是变化率。

写成微分形式:

\[\mathrm{d}y=2x \, \mathrm{d}x\]

它描述的是微小变化之间的关系。

所以可以理解成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
函数:

y = x²

    ↓ 求导

局部变化率:

dy/dx = 2x

    ↓ 写成微分形式

微小变化关系:

dy = 2x dx

4. 积分: 把微小贡献累加起来 ( 这些局部的小变化累计起来, 总共有多少? )

核心用途是:

我已经知道每一个局部位置会贡献多少, 现在想知道整个范围累积起来是多少.

现在反过来看:

\[\mathrm{d}y=2x \, \mathrm{d}x\]

它告诉我们:

在每一个位置 $x$, 发生一个微小的 $dx$, 就会产生一个微小的 $dy$。

如果想知道 $x$ 从 $1$ 变化到 $3$ 的过程中, $y$ 一共变化了多少, 就需要把途中所有的 $dy$ 累加起来:

\[\int \mathrm{d}y\]

也就是:

\[\int_1^3 2x \, \mathrm{d}x\]

因此积分可以直观理解成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dx -> 产生一个 dy

dx -> 产生一个 dy

dx -> 产生一个 dy

dx -> 产生一个 dy

...

全部加起来

        ↓

得到总变化量

所以:

积分就是把连续的微小贡献累加起来。

这里的微小贡献不一定叫 $\mathrm{d}y$。

例如速度问题中:

\[\mathrm{d}s=v(t)\mathrm{d}t\]

$v(t)dt$ 是一小段路程。

那么:

\[\int v(t)\mathrm{d}t\]

就是把所有小段路程累加成总路程。


5. 第一种积分方法: 解析积分(找原函数)

第一种方法通常称为 解析积分, 也可以说是 用解析法计算积分

这里可以先简单理解为:

通过寻找原函数来计算积分。

例如计算:

\[\int_0^2(x+1)\mathrm{d}x\]

可以先把:

\[(x+1)\mathrm{d}x\]

看成某个函数 $F(x)$ 的微分:

\[\mathrm{d}F=(x+1)\mathrm{d}x\]

你要高兴的话写成: $\mathrm{d}y=(x+1) \, \mathrm{d}x$ 也可以, 这样类似之前的写法.

那么:

\[\frac{\mathrm{d}F}{\mathrm{d}x}=x+1\]

也就是:

\[F'(x)=x+1\]

现在问题变成:

哪个函数求导以后等于 $x+1$?

因为:

\[\frac{\mathrm{d}}{\mathrm{d}x}\left(\frac{1}{2}x^2\right)=x\]

并且:

\[\frac{\mathrm{d}}{\mathrm{d}x}(x)=1\]

所以:

\[F(x)=\frac{1}{2}x^2+x+C\]

这就是找到的原函数。

其中 $C$ 是任意常数。

因为所有常数求导以后都是 $0$。

例如:

\[\frac{\mathrm{d}}{\mathrm{d}x}(x^2+1)=2x\] \[\frac{\mathrm{d}}{\mathrm{d}x}(x^2+100)=2x\]

所以从导数反推原函数时, 必须保留:

\[+C\]

6. 利用范围得到定积分结果

已经得到:

\[F(x)=\frac{1}{2}x^2+x+C\]

积分范围是:

\[0\rightarrow2\]

根据微积分基本定理:

\[\int_0^2(x+1) \, \mathrm{d}x = F(2)-F(0)\]

计算:

\[F(2)=\frac{1}{2}\times2^2+2+C=4+C\] \[F(0)=C\]

所以:

\[F(2)-F(0)=(4+C)-C=4\]

最终:

\[\boxed{ \int_0^2(x+1) \, \mathrm{d}x=4 }\]

这里的 $C$ 会自动抵消。


7. 解析积分的完整流程

因此解析积分可以理解成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
∫ f(x) dx

    ↓

认为:

dF = f(x) dx

    ↓

所以:

F'(x) = f(x)

    ↓

从导数反推出原函数:

F(x)

    ↓

如果积分范围是 a -> b:

F(b) - F(a)

    ↓

得到积分结果

所以对于普通的手算积分:

解析积分最关键的步骤, 通常就是从已知的导数形式反推出原函数。

也就是:

1
2
3
4
5
解析积分
=
找原函数
+
利用积分范围计算结果

8. 但有些原函数无法简单写出来

例如:

\[\int e^{-x^2} \, \mathrm{d}x\]

它的原函数存在。

但是无法使用我们通常熟悉的有限组合, 例如:

1
2
3
4
5
6
多项式
指数函数
对数函数
三角函数
开方
四则运算

写成一个简单的原函数公式。

因此对于:

\[\int_0^1e^{-x^2} \, \mathrm{d}x\]

不能方便地使用:

1
2
3
4
5
找到 F(x)

    ↓

F(1) - F(0)

这时就可以使用另一种方法:

数值积分。


9. 第二种积分方法: 数值积分

数值积分不尝试寻找原函数。

它直接按照:

把大量微小贡献加起来。

这个思路计算。

例如:

\[\int_0^1e^{-x^2} \, \mathrm{d}x\]

先把:

\[0\rightarrow1\]

分成 $N$ 份。

假设首先:

\[N=4\]

那么每份宽度:

\[\Delta x=\frac{1}{4}=0.25\]

区间变成:

1
2
0        0.25       0.5       0.75       1
|----------|----------|----------|----------|

使用每一段的左端点计算。


10. 第一段

\[x=0\]

函数值:

\[e^{-0^2}=1\]

这一段的贡献:

\[1\times0.25=0.25\]

11. 第二段

\[x=0.25\]

函数值:

\[e^{-0.25^2} \approx0.939413\]

贡献:

\[0.939413\times0.25 \approx0.234853\]

12. 第三段

\[x=0.5\]

函数值:

\[e^{-0.5^2} \approx0.778801\]

贡献:

\[0.778801\times0.25 \approx0.194700\]

13. 第四段

\[x=0.75\]

函数值:

\[e^{-0.75^2} \approx0.569783\]

贡献:

\[0.569783\times0.25 \approx0.142446\]

14. 把所有贡献加起来

\[0.25 + 0.234853 + 0.194700 + 0.142446\]

得到:

\[0.821999\]

所以:

\[\int_0^1e^{-x^2} \, \mathrm{d}x \approx0.821999\]

这个结果误差还比较大。

原因是只切了 4 段。


15. 增加切分数量

如果增加 $N$:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
N = 4

约 0.821999


N = 10

约 0.777817


N = 100

约 0.749979


N = 1000

约 0.747140


N = 10000

约 0.746856

可以看到结果逐渐接近:

\[0.746824...\]

也就是:

\[\boxed{ \int_0^1e^{-x^2} \, \mathrm{d}x \approx0.746824 }\]

16. 数值积分实际执行的算法

设:

\[\Delta x=\frac{1}{N}\]

每一个位置:

\[x_i=i\Delta x\]

每一小段贡献:

\[e^{-x_i^2}\Delta x\]

然后全部求和:

\[\sum_{i=0}^{N-1} e^{-x_i^2}\Delta x\]

程序实际上就是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
N = 10000

dx = 1 / N

sum = 0

for i = 0 to N - 1
{
    x = i * dx

    value = exp(-x * x)

    contribution = value * dx

    sum += contribution
}

最终:

1
sum ≈ 0.746856

17. 为什么增加 N 会越来越准确

数学上的积分可以理解成:

\[\int_a^b f(x) \, \mathrm{d}x=\lim_{N\to\infty} \sum_{i=0}^{N-1} f(x_i)\Delta x\]

也就是说:

1
2
3
4
5
6
7
8
9
10
11
12
13
N 越来越大

        ↓

区间被切得越来越细

        ↓

Δx 越来越接近 0

        ↓

有限求和越来越接近真正的积分

真正的数学定义考虑:

\[N\to\infty\]

而计算机无法进行无限次计算。

所以数值积分使用:

\[N=100\] \[N=10000\]

或者其他有限数量的采样, 去近似最终结果。

因此:

数值积分就是使用有限次数的求和, 去近似积分中无限细分的求和极限。


18. 解析积分与数值积分的区别

可以最终整理成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
                    积分
                     │
                     │
          累加连续的微小贡献
                     │
          ┌──────────┴──────────┐
          │                     │
       解析积分               数值积分
          │                     │
      寻找原函数           把区间切成很多段
          │                     │
    F'(x) = f(x)          每段计算一个贡献
          │                     │
       找到 F(x)            f(x) × Δx
          │                     │
    F(b) - F(a)             全部求和
          │                     │
       得到结果              得到近似结果

这里可以直接记住:

1
2
3
4
5
6
7
解析积分
=
找原函数

数值积分
=
切分 + 采样 + 求和近似

19. 最终理解

目前可以先建立下面这套认识。

求导

从一个完整函数中, 得到某一点的瞬时变化率。

例如:

\[y=x^2\]

得到:

\[\frac{\mathrm{d}y}{\mathrm{d}x}=2x\]

微分

把这个变化率写成微小变化之间的关系:

\[\mathrm{d}y=2x \, \mathrm{d}x\]

表示:

一个微小的 $\mathrm{d}x$, 会产生多少 $\mathrm{d}y$。


积分

把这些微小贡献不断累加起来:

\[\int \mathrm{d}y\]

得到整个范围内的总变化。


解析积分

如果可以从:

\[F'(x)=f(x)\]

找到原函数:

\[F(x)\]

那么可以直接使用:

\[\int_a^b f(x)\mathrm{d}x=F(b)-F(a)\]

计算积分。

所以:

解析积分可以简单理解成”寻找原函数的方法”。


数值积分

如果原函数不好求, 或者无法用简单公式表示, 就直接把区间分成大量小段:

\[f(x_0)\Delta x + f(x_1)\Delta x + f(x_2)\Delta x +\cdots\]

用有限次数的求和近似真正的积分。


因此目前可以把整套关系浓缩成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
函数
 │
 │ 求导
 ↓
局部变化率
dy/dx
 │
 │ 写成微分
 ↓
dy = f'(x) dx
 │
 │ 积分
 ↓
把无数局部变化累加
 │
 ↓
得到整体变化

其中积分有两条主要计算路线:

1
2
3
4
5
6
7
8
9
10
11
12
能方便找到原函数
        ↓
解析积分
        ↓
F(b) - F(a)


不方便找到原函数
        ↓
数值积分
        ↓
大量小块求和近似

这就是目前阶段理解求导、微分和积分最重要的整体关系。

参考网页

本文由作者按照 CC BY 4.0 进行授权