非常好 👍
“用 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} )。

图像上,这个点刚好在正弦波的最高点,切线是水平的,割线也是水平的。


📚 五、总结与延伸

关键点含义
连续性 + 可导性微分中值定理成立的前提
几何意义存在一点的切线斜率等于整个区间平均斜率
实际应用速度、误差分析、函数单调性分析

🔗 出站参考链接