Skip to content

第 2 章 变化率与切线 ​

学习目标 ​

  • 理解割线斜率随区间缩小而变化
  • 直观理解「切线是割线的极限位置」
  • 理解瞬时变化率与瞬时速度
  • 会用 Python 数值逼近瞬时变化率
  • 为第 3 章极限、第 5 章导数建立直觉

2.1 一个问题:车速表上的数字 ​

第 1 章算过汽车从 1 小时到 3 小时的平均速度是 80 km/h。可是问题来了:车速表显示的是某一瞬间的速度——比如 1 小时整那一刻,车到底是多快?平均速度回答不了这个问题,因为「那一刻」前后没有时间差,用「路程差 ÷ 时间差」会得到 ,没有意义。

这就是微积分要解决的第一个问题:瞬时变化率——一个量在某一瞬间变化的快慢。

微积分处理「瞬时」的方法很朴素:算不出「那一刻」,就先算「那一刻附近」,再把附近的范围越缩越小,看结果向哪个数靠拢。这个「越缩越小,结果越靠拢」的过程,就是下一章的极限;这一章先把直觉建立起来。

2.2 割线斜率随区间缩小而变化 ​

先看最简单的弯曲曲线 ,问: 这一点,曲线「倾斜」得多厉害?

连接 和 的割线,斜率是

这里的 是「横坐标往后挪多少」,它越小,割线就越贴近 这一带。逐项展开:

除以 :

(约分依据:分子每一项都含 ,提取 ,再除以 ,前提是 。)

列一张表,看 缩小到 0 时 的变化:

越接近 0, 越接近 2。注意:永远不等于 2( 一旦等于 0,除法就没有意义),但可以要多接近就有多接近。我们把这时的 2 叫做「 处切线的斜率」,也说「 在 处的瞬时变化率是 2」。

用 Python 复现这张表:

python
h_values = [1.0, 0.5, 0.1, 0.01, 0.001]
for h in h_values:
    secant_slope = ((1 + h) ** 2 - 1) / h
    print(f"h = {h:<6} 平均变化率 = {secant_slope:.4f}")
text
h = 1.0    平均变化率 = 3.0000
h = 0.5    平均变化率 = 2.5000
h = 0.1    平均变化率 = 2.1000
h = 0.01   平均变化率 = 2.0100
h = 0.001  平均变化率 = 2.0010

2.3 切线:割线的极限位置 ​

把上面的过程画出来。 从大变小,割线绕着一个点慢慢转动,越来越接近一条特殊的直线——切线。

切线(tangent line):曲线在点 处的切线,是「过 的割线在 时的极限位置」,它的斜率是瞬时变化率。

割线逼近切线

画图的代码:

python
import matplotlib.pyplot as plt
from matplotlib import font_manager
for f in font_manager.findSystemFonts():
    if any(k in f for k in ("NotoSansCJK", "NotoSansSC", "wqy", "SimHei", "msyh", "PingFang")):
        font_manager.fontManager.addfont(f)
plt.rcParams["font.sans-serif"] = ["Noto Sans CJK SC", "WenQuanYi Zen Hei", "SimHei", "Microsoft YaHei", "PingFang SC"]
plt.rcParams["axes.unicode_minus"] = False

import numpy as np

x = np.linspace(-0.2, 2.4, 400)
y = x ** 2

fig, ax = plt.subplots(figsize=(7, 5.5))
ax.plot(x, y, color="tab:blue", label="f(x) = x²")

# 多条割线:h 依次变小
for h, c in [(1.5, "tab:orange"), (0.8, "tab:green"), (0.3, "tab:purple")]:
    x1, x2 = 1.0, 1.0 + h
    ax.plot([x1, x2], [x1**2, x2**2], color=c, linestyle="--",
            label=f"割线 h = {h}")
    ax.scatter([x1, x2], [x1**2, x2**2], color=c, s=18, zorder=3)

# 切线 y = 2x - 1(斜率 2,过 (1,1))
x_tan = np.array([0.2, 1.8])
ax.plot(x_tan, 2 * x_tan - 1, color="tab:red", linewidth=2.2, label="切线 y = 2x - 1")
ax.scatter([1], [1], color="tab:red", s=42, zorder=4)
ax.annotate("P(1, 1)", (1, 1), textcoords="offset points", xytext=(10, -6), color="tab:red")

ax.set_xlim(-0.3, 2.5)
ax.set_ylim(-0.4, 5.2)
ax.set_aspect("equal")
ax.grid(True, linestyle=":", alpha=0.5)
ax.legend(loc="upper left")
ax.set_title("割线随 h 缩小,逼近切线")
fig.savefig("book/public/figs/fig02-secant_tangent.png", dpi=120, bbox_inches="tight")
plt.close(fig)

切线的代数求法,这一章先用「化简公式」做:

「为什么切线是直线?」因为曲线在某一点附近足够平滑时,放得足够大,它就像一条直线。这条直线和曲线在这一点「贴」得最紧,这就是切线的含义。后面的第 5 章会给它严格的定义,现在先记住画面。

2.4 瞬时速度:平均速度的极限 ​

回到汽车。 是 小时的路程(千米)。求 时刻的瞬时速度,做法和求切线斜率完全一样:算 到 的平均速度,再看 时它逼近什么。

展开计算,每一步都写清楚:

当 ,平均速度逼近 。所以这辆车在 时刻的瞬时速度是 70 km/h——不是 1 到 3 小时的平均 80,也不是 0 到 1 小时的平均,而是「那一刻」的速度。

用 Python 逼近:

python
def s(t):
    return 60 * t + 5 * t ** 2

for h in [1.0, 0.1, 0.01, 0.001]:
    v_avg = (s(1 + h) - s(1)) / h
    print(f"h = {h:<6} 平均速度 = {v_avg:.4f} km/h")
text
h = 1.0    平均速度 = 75.0000 km/h
h = 0.1    平均速度 = 70.5000 km/h
h = 0.01   平均速度 = 70.0500 km/h
h = 0.001  平均速度 = 70.0050 km/h

瞬时速度

python
import matplotlib.pyplot as plt
from matplotlib import font_manager
for f in font_manager.findSystemFonts():
    if any(k in f for k in ("NotoSansCJK", "NotoSansSC", "wqy", "SimHei", "msyh", "PingFang")):
        font_manager.fontManager.addfont(f)
plt.rcParams["font.sans-serif"] = ["Noto Sans CJK SC", "WenQuanYi Zen Hei", "SimHei", "Microsoft YaHei", "PingFang SC"]
plt.rcParams["axes.unicode_minus"] = False

import numpy as np

def s(t):
    return 60 * t + 5 * t ** 2

t = np.linspace(0.3, 1.9, 400)
fig, ax = plt.subplots(figsize=(7, 5))
ax.plot(t, s(t), color="tab:blue", label="s(t) = 60t + 5t²")

for h, c in [(0.8, "tab:orange"), (0.3, "tab:green"), (0.1, "tab:purple")]:
    t1, t2 = 1.0, 1.0 + h
    ax.plot([t1, t2], [s(t1), s(t2)], color=c, linestyle="--", label=f"平均速度 h = {h}")

# 切线:瞬时速度 70,过 (1, 65)
t_tan = np.array([0.4, 1.5])
ax.plot(t_tan, 70 * (t_tan - 1) + 65, color="tab:red", linewidth=2.2,
        label="瞬时速度 = 70 km/h")
ax.scatter([1], [65], color="tab:red", s=42, zorder=4)
ax.annotate("t = 1 时刻", (1, 65), textcoords="offset points", xytext=(10, 4), color="tab:red")

ax.set_xlim(0.3, 1.9)
ax.set_ylim(30, 160)
ax.set_xlabel("时间 t(小时)")
ax.set_ylabel("路程 s(千米)")
ax.grid(True, linestyle=":", alpha=0.5)
ax.legend(loc="upper left", fontsize=9)
ax.set_title("平均速度逼近瞬时速度")
fig.savefig("book/public/figs/fig02-speed.png", dpi=120, bbox_inches="tight")
plt.close(fig)

2.5 一般做法:瞬时变化率 ​

把前面两个例子的共同点提炼出来。函数 在点 处的瞬时变化率,就是把区间 越缩越小时平均变化率的极限:

这个式子就是下一章要严格化的极限,也是第 5 章导数的定义。现在只要求理解它的意思:

  1. 先算平均变化率(割线斜率);
  2. 让 越来越小(割线绕点转动);
  3. 观察平均变化率逼近哪个数(切线斜率 / 瞬时速度)。

注意 可以取正数,也可以取负数(区间在 左边)。两边逼近同一个数,瞬时变化率才存在——这是第 3 章「左极限 = 右极限」的直观来源。

2.6 动手实践:自由落体 ​

自由落体路程 ( 秒,路程单位米),求 秒时的瞬时速度:

python
def s(t):
    return 5 * t ** 2

for h in [0.1, 0.01, 0.001, 0.0001]:
    v_avg = (s(3 + h) - s(3)) / h
    print(f"h = {h:<8} 平均速度 = {v_avg:.4f} m/s")
text
h = 0.1     平均速度 = 30.5000 m/s
h = 0.01    平均速度 = 30.0500 m/s
h = 0.001   平均速度 = 30.0050 m/s
h = 0.0001  平均速度 = 30.0005 m/s

逼近 30 m/s。由 m/s² 的物理公式 验证:。数学上的极限和物理上的瞬时速度,说的是同一件事。

常见错误 ​

错误写法/理解原因
认为 可以等于 0 时分母为 0,平均变化率没有意义;极限说的是「逼近」而非「等于」
看到 就把 直接当 0 代入代入前必须先化简、约分;直接代入会得到
把割线当成切线割线过曲线上两点,切线是割线的极限位置,只「贴」住一点附近
认为瞬时速度 = 某段平均速度瞬时速度是区间缩到 0 的极限,和任意一段的平均速度不一定相等
忽略 取负数的情况瞬时变化率要求左右两边逼近同一个数

章末练习 ​

基础

  1. 对 ,写出 处割线斜率 的化简结果,并说出 时它逼近几。
  2. 在 秒的瞬时速度是多少?用「化简 → 取极限」两步写出过程。
  3. 用 Python 计算 时 在 处的平均变化率,并猜测极限值。

提高

  1. 对 , 处的瞬时变化率是 。请用 化简后取极限,证明这个结果。
  2. 一辆车 (匀速),它在任意时刻的瞬时速度是多少?为什么这次不需要极限?

挑战

  1. 用割线斜率公式 化简 ,证明它在任意点 处的瞬时变化率是 。
  2. 画图验证:在 的顶点 处,切线是水平的(斜率为 0),并解释为什么「顶点处变化率为 0」是合理的。

章末自测 ​

每题选择一个最佳答案。本书不附答案:完成后交由老师或 AI 老师批改讲解。

  1. 割线斜率的公式是?
    • A.
    • B.
    • C.
    • D.
  2. 表示?
    • A. 横坐标的变化量
    • B. 函数值
    • C. 切线长度
    • D. 斜率
  3. 对 ,在 处 化简为?
    • A.
    • B.
    • C.
    • D.
  4. 时, 逼近?
    • A.
    • B.
    • C.
    • D.
  5. 切线与割线的区别是?
    • A. 切线是水平的
    • B. 切线是割线在 时的极限位置
    • C. 切线过三个点
    • D. 切线不存在斜率
  6. 在 时的瞬时速度是?
    • A.
    • B.
    • C.
    • D.
  7. 在 时的瞬时速度是?
    • A.
    • B.
    • C.
    • D.
  8. 瞬时变化率存在,要求?
    • A. 左、右两边逼近同一个数
    • B. 只从右边逼近
    • C. 等于 0
    • D. 函数是直线
  9. 曲线 在 处的切线方程是?
    • A.
    • B.
    • C.
    • D.
  10. 平均速度与瞬时速度的关系是?
    • A. 两者永远相等
    • B. 瞬时速度是平均速度在区间长度趋近 0 时的极限
    • C. 瞬时速度总是更大
    • D. 没有关系