数学重学 - 25 微积分直觉

这是 数学重学路线图 阶段五的子页面

微积分直觉:变化与累积的数学

微积分听起来吓人,但核心思想其实很简单

整个微积分就回答两个问题:

东西变化有多快? → 导数(微分)

变化累积起来有多少? → 积分

你每天都在用微积分思维,只是没意识到

看速度表 → 你在读导数

算一趟旅程总里程 → 你在做积分

一、极限:微积分的地基

直觉:无限趋近,但不一定到达

想象你站在墙前面,每次向前走剩余距离的一半

1/2 → 3/4 → 7/8 → 15/16 → …

你永远到不了墙,但你无限趋近于墙

这就是极限的本质

经典例子:无穷级数

1/2 + 1/4 + 1/8 + 1/16 + ... = 1

每一项都是有限的,但无穷多项加起来等于一个确定的值

极限就是这个”趋近的目标值”

严格定义(ε-δ 语言)

lim(x→a) f(x) = L

意思是:x 越靠近 a,f(x) 就越靠近 L,想多近就多近

不需要 x 真的等于 a

为什么极限重要?

导数的定义需要极限(瞬时变化率 = 极小间隔的平均变化率的极限)

积分的定义需要极限(无穷多个极小矩形面积之和的极限)

没有极限,微积分就没有根基

Python 感受极限

1
2
3
4
5
6
7
8
9
10
11
12
# 感受 1/2 + 1/4 + 1/8 + ... → 1
total = 0
for n in range(1, 50):
total += 1 / (2 ** n)
print(f"前 {n:2d} 项之和 = {total:.15f}")
# 越来越接近 1,但永远不会精确等于 1(浮点精度限制除外)

# 感受 lim(x→0) sin(x)/x = 1
import math
for k in range(1, 15):
x = 10 ** (-k)
print(f"x = 1e-{k:2d}, sin(x)/x = {math.sin(x)/x:.15f}")

二、导数(微分):变化有多快

直觉比喻

你开车看仪表盘:

位置 → 你在哪(原始函数)

速度 → 位置变化多快(一阶导数)

加速度 → 速度变化多快(二阶导数)

导数 = 某一瞬间的变化率

几何含义

导数 = 曲线在某点的切线斜率

斜率正 → 函数在上升

斜率负 → 函数在下降

斜率零 → 函数到了”山顶”或”谷底”(极值点)

导数的定义

f'(x) = lim(h→0) [f(x+h) - f(x)] / h

就是:取一个极小间隔 h,算平均变化率,然后让 h 趋近于 0

常见导数公式(背下来)

| 函数 f(x) | 导数 f’(x) | 记忆技巧 |
| x^n | n·x^(n-1) | 指数搬下来,指数减一 |
| e^x | e^x | e^x 的导数还是自己! |
| ln(x) | 1/x | 对数和倒数是好朋友 |
| sin(x) | cos(x) | sin→cos→-sin→-cos 循环 |
| cos(x) | -sin(x) | 注意负号 |

链式法则(最重要的求导法则)

复合函数求导:[f(g(x))]' = f'(g(x)) · g'(x)

比喻:层层剥洋葱,每一层求导后乘起来

例子:(sin(x²))' = cos(x²) · 2x

外层 sin 的导数是 cos,内层 x² 的导数是 2x

这是反向传播(backpropagation)的数学基础!

Python 数值求导 & 画切线

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
import numpy as np
import matplotlib.pyplot as plt

def f(x):
return x ** 3 - 3 * x + 1

def numerical_derivative(f, x, h=1e-8):
"""数值求导:用极小的 h 逼近导数"""
return (f(x + h) - f(x - h)) / (2 * h)

# 在 x=1 处求导并画切线
x0 = 1.0
slope = numerical_derivative(f, x0)
print(f"f'({x0}) ≈ {slope:.6f}") # 解析解: 3x²-3 = 0

x = np.linspace(-3, 3, 300)
y = f(x)
tangent = f(x0) + slope * (x - x0)

plt.figure(figsize=(8, 5))
plt.plot(x, y, 'b-', label='f(x) = x³ - 3x + 1')
plt.plot(x, tangent, 'r--', label=f'切线 (斜率={slope:.2f})')
plt.plot(x0, f(x0), 'ro', markersize=8)
plt.legend()
plt.grid(True)
plt.title('函数与切线')
plt.ylim(-5, 5)
plt.show()

三、积分:累积了多少

直觉比喻

如果导数是”速度”,那积分就是”总路程”

你知道每一刻的速度 → 积分算出你跑了多远

积分 = 导数的逆运算

几何含义

定积分 = 曲线下方的面积

(曲线在 x 轴下方时,面积算负数)

不定积分 vs 定积分

不定积分:求原函数(反导数),结果带 +C

∫x² dx = x³/3 + C

定积分:求确定的数值(面积)

∫[a,b] f(x)dx = F(b) - F(a)

牛顿-莱布尼茨公式把两者连起来

Python 数值积分

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
from scipy import integrate
import numpy as np

# 方法1:scipy 数值积分
def f(x):
return x ** 2

result, error = integrate.quad(f, 0, 3)
print(f"∫[0,3] x² dx = {result:.6f}") # 解析解 = 9
print(f"误差估计: {error:.2e}")

# 方法2:梯形法则(手动实现)
def trapezoidal(f, a, b, n=1000):
"""梯形法数值积分"""
x = np.linspace(a, b, n + 1)
y = f(x)
h = (b - a) / n
return h * (y[0]/2 + np.sum(y[1:-1]) + y[-1]/2)

print(f"梯形法结果: {trapezoidal(f, 0, 3):.6f}")

# 方法3:辛普森法则(更精确)
result_simpson = integrate.simpson(f(np.linspace(0, 3, 101)),
x=np.linspace(0, 3, 101))
print(f"辛普森法结果: {result_simpson:.6f}")

四、微积分基本定理

一句话版本

微分和积分是互逆操作

先求导再积分 → 回到原函数

先积分再求导 → 也回到原函数

公式

如果 F'(x) = f(x),那么 ∫[a,b] f(x)dx = F(b) - F(a)

为什么重要

把”求面积”这个看起来要无穷求和的问题,变成了”求原函数然后代入”

计算效率从 O(∞) 变成 O(1)

五、开发者视角的微积分

梯度下降(最核心的应用)

机器学习的本质:找到让损失函数最小的参数

怎么找?沿导数(梯度)的反方向

参数 = 参数 - 学习率 × 导数

详见 → 26-优化与梯度下降

数值积分在后端的应用

QPS(每秒请求数)对时间积分 = 总请求数

带宽速率对时间积分 = 总流量

错误率对时间积分 = 总错误数

Python 梯度下降最简演示

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
30
31
32
33
34
35
import numpy as np
import matplotlib.pyplot as plt

# 目标:找 f(x) = (x-3)² + 1 的最小值
def f(x):
return (x - 3) ** 2 + 1

def df(x):
"""f 的导数"""
return 2 * (x - 3)

# 梯度下降
x = 0.0 # 初始点
lr = 0.1 # 学习率
history = [x]

for i in range(30):
grad = df(x)
x = x - lr * grad # 核心:沿导数反方向走
history.append(x)
if abs(grad) < 1e-6:
break

print(f"最优解: x = {x:.6f}, f(x) = {f(x):.6f}")

# 可视化
x_plot = np.linspace(-2, 8, 200)
plt.figure(figsize=(8, 5))
plt.plot(x_plot, f(x_plot), 'b-', label='f(x)')
plt.plot(history, [f(h) for h in history], 'ro-', markersize=5,
label='梯度下降路径')
plt.legend()
plt.grid(True)
plt.title('梯度下降找最小值')
plt.show()

六、大数据中的微积分

损失函数求导

训练模型 = 最小化损失函数

损失函数对参数求导 → 知道参数该往哪个方向调

链式法则 → 反向传播算法

变化率作为特征

时间序列数据的导数 = 趋势的变化速度

二阶导数 = 趋势的拐点

例:用户活跃度的变化率 → 预测流失

积分作为聚合

流量曲线下面积 = 总流量

概率密度函数积分 = 概率

七、安全中的微积分

流量变化率突变检测

正常流量:变化率平稳

DDoS 攻击:流量导数突然飙升

检测方法:监控流量的一阶导数,超过阈值就报警

Python 流量异常检测

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import numpy as np

# 模拟流量数据(正常 + 攻击)
np.random.seed(42)
normal_traffic = 100 + np.random.normal(0, 5, 100)
attack_traffic = np.linspace(100, 500, 20) # 突然飙升
traffic = np.concatenate([normal_traffic, attack_traffic,
normal_traffic[:30]])

# 计算"导数"(差分)
derivative = np.diff(traffic)

# 检测异常:导数绝对值超过阈值
threshold = 15 # 正常波动约 ±5
anomalies = np.where(np.abs(derivative) > threshold)[0]

print(f"检测到异常时间点: {anomalies}")
print(f"攻击实际开始时间点: 100")

# 实际中你会对 derivative 做滑动窗口平均来降噪
window = 5
smooth_deriv = np.convolve(derivative, np.ones(window)/window, mode='valid')

梯度攻击(对抗样本)

攻击者利用模型的梯度信息,微调输入使模型判断错误

FGSM 攻击:x_adv = x + ε · sign(∇_x Loss)

沿损失函数对输入的梯度方向加扰动

八、scipy 求导与积分速查

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
from scipy import integrate, misc
import numpy as np

# ===== 数值求导 =====
def f(x):
return np.sin(x) * np.exp(-x)

# scipy.misc.derivative(中心差分法)
deriv_at_0 = misc.derivative(f, 0, dx=1e-8)
print(f"f'(0) = {deriv_at_0:.8f}")
# 解析解: cos(0)*e^0 - sin(0)*e^0 = 1.0

# ===== 数值积分 =====
# 单重积分
result, _ = integrate.quad(lambda x: x**2, 0, 1)
print(f"∫[0,1] x² dx = {result:.6f}") # = 1/3

# 二重积分
result, _ = integrate.dblquad(
lambda y, x: x * y, # 被积函数
0, 1, # x 的范围
0, 2 # y 的范围
)
print(f"∫∫ xy dxdy = {result:.6f}") # = 1

# 广义积分(无穷区间)
result, _ = integrate.quad(lambda x: np.exp(-x**2), -np.inf, np.inf)
print(f"∫[-∞,∞] e^(-x²) dx = {result:.6f}") # = √π ≈ 1.7725

九、练习题

题目1:直觉理解

如果 f(x) 表示你银行账户余额随时间的变化,那么 f'(x) 的物理含义是什么?f'(x) > 0f'(x) < 0 分别代表什么?

答案

f'(x) = 收入/支出速率(每单位时间余额变化量)

f'(x) > 0:在赚钱(余额增加)

f'(x) < 0:在花钱(余额减少)

f'(x) = 0:收支平衡

题目2:手算导数

f(x) = 3x⁴ - 2x² + 5x - 7 的导数

答案

f'(x) = 12x³ - 4x + 5

逐项求导:(3x⁴)' = 12x³(-2x²)' = -4x(5x)' = 5(-7)' = 0

题目3:链式法则

f(x) = e^(x²+1) 的导数

答案

外层 e^u 的导数是 e^u,内层 u = x²+1 的导数是 2x

f'(x) = e^(x²+1) · 2x = 2x·e^(x²+1)

题目4:Python 实践

用 Python 数值验证:∫[0,π] sin(x) dx = 2

答案

1
2
3
4
from scipy import integrate
import numpy as np
result, _ = integrate.quad(np.sin, 0, np.pi)
print(f"结果: {result:.10f}") # 应该非常接近 2.0

题目5:安全应用

设计一个简单的 QPS 突增检测器:给定每秒请求数的列表,找出 QPS 变化率(导数)超过阈值的时间点

答案

1
2
3
4
5
6
7
8
9
import numpy as np

qps_data = [100, 102, 98, 105, 101, 200, 350, 500, 480, 103, 99]
derivative = np.diff(qps_data)
threshold = 50
alerts = [(i, derivative[i]) for i in range(len(derivative))
if abs(derivative[i]) > threshold]
print(f"告警时间点: {alerts}")
# [(4, 99), (5, 150), (6, 150)]

十、总结与关联

微积分两大支柱:

导数 → 变化率 → 梯度下降、异常检测

积分 → 累积量 → 面积、总量统计

核心关系:微分和积分互逆

关联笔记

26-优化与梯度下降 深入梯度下降

→ 数学重学/24-概率分布 概率密度函数的积分 = 概率

27-信息论基础 交叉熵损失背后的数学


上一章 目录 下一章
24-线性代数实战 数学重学路线图 26-优化与梯度下降