非常好 👍
“用 Python 来学微积分”是一个非常有效的方式,因为它能把抽象的数学定理 直观可视化。
今天我们来讲第 23 课:微分中值定理(Mean Value Theorem, MVT)。
🧠 一、微分中值定理是什么?
若函数 ( f(x) ) 在区间 ([a,b]) 上连续,并在 ((a,b)) 内可导,则存在至少一个点 ( c \in (a,b) ),使得:
[
f'(c) = \frac{f(b) – f(a)}{b – a}
]
通俗理解:
在连续光滑的曲线上,至少存在一点的切线斜率,等于整个区间的割线斜率。
✍️ 二、Python 实验演示
我们用 Python + Matplotlib 来 可视化证明 MVT。
📦 1. 导入依赖
import numpy as np
import matplotlib.pyplot as plt
from sympy import symbols, diff, solve
🧩 2. 定义函数(例如 ( f(x) = x^2 ))
x = symbols('x')
f = x**2
a, b = 1, 4
🧮 3. 计算平均变化率(割线斜率)
f_a = f.subs(x, a)
f_b = f.subs(x, b)
slope = (f_b - f_a) / (b - a)
print("割线斜率 =", slope)
🔍 4. 求出 c(使得 f'(c) = slope)
f_prime = diff(f, x)
c_val = solve(f_prime - slope, x)
print("符合微分中值定理的 c =", c_val)
📈 5. 可视化
# 转换为 numpy 函数
f_np = np.vectorize(lambda x_val: f.subs({'x': x_val}))
x_vals = np.linspace(a-1, b+1, 200)
y_vals = f_np(x_vals)
# 割线
secant_y = f_a + slope * (x_vals - a)
# 切线在 c 点
c_num = float(c_val[0])
f_c = f_np(c_num)
tangent_y = f_c + slope * (x_vals - c_num)
plt.figure(figsize=(8,5))
plt.plot(x_vals, y_vals, label='f(x)=x²', color='blue')
plt.plot(x_vals, secant_y, '--', label='割线', color='orange')
plt.plot(x_vals, tangent_y, '--', label='切线 (c点)', color='green')
plt.scatter([a,b,c_num], [f_a,f_b,f_c], color='red')
plt.text(c_num, f_c+1, f'c={c_num:.2f}', color='green')
plt.legend()
plt.title("微分中值定理:f'(c) = (f(b)-f(a)) / (b-a)")
plt.xlabel("x")
plt.ylabel("f(x)")
plt.grid(True)
plt.show()
📊 三、运行结果(解释)
执行上面的代码后,你会看到一张图:
- 蓝色曲线是 ( f(x) = x^2 )
 - 橙色虚线是割线(连接点 (1, f(1)) 和 (4, f(4)))
 - 绿色虚线是切线(在 ( c ) 处,斜率相同)
 
程序会输出:
割线斜率 = 5
符合微分中值定理的 c = [2.5]
即在 ( c = 2.5 ) 处,切线与割线平行 ✅。
🧩 四、再试一个更有趣的例子
换成三角函数:
f = np.sin(x)
a, b = 0, np.pi
结果:
[
f'(c) = \cos(c) = \frac{\sin(\pi) – \sin(0)}{\pi – 0} = 0
]
即 ( \cos(c) = 0 ),得到 ( c = \frac{\pi}{2} )。
图像上,这个点刚好在正弦波的最高点,切线是水平的,割线也是水平的。
📚 五、总结与延伸
| 关键点 | 含义 | 
|---|---|
| 连续性 + 可导性 | 微分中值定理成立的前提 | 
| 几何意义 | 存在一点的切线斜率等于整个区间平均斜率 | 
| 实际应用 | 速度、误差分析、函数单调性分析 | 
发表回复