Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第三十三 微积分(Calculus)

微积分(Calculus)是数学中最伟大的成就之一,由牛顿和莱布尼茨在 17 世纪独立创立。它的核心思想是以直代曲、以简代繁——把复杂问题分解成无数个小的、简单的问题,然后再整合结果。

  • 微分(求导):求变化快慢,比如速度、斜率
  • 积分:求累积总量,比如面积、路程
  • 两者互为逆运算(导数 ↔ 积分)

一、极限与连续

1.1 极限的定义

$$\lim_{x \to a} f(x) = L$$

表示当 $x$ 无限接近 $a$ 时,$f(x)$ 无限接近 $L$。

1.2 重要极限

$$\lim_{x \to 0} \frac{\sin x}{x} = 1$$

$$\lim_{x \to 0} \frac{e^x - 1}{x} = 1$$

$$\lim_{x \to 0} \frac{a^x - 1}{x} = \ln a \quad (a > 0)$$

$$\lim_{n \to \infty} \left(1 + \frac{1}{n}\right)^n = e$$

1.3 无穷小与无穷大

  • 无穷小:极限为 0 的量
  • 无穷大:趋向于无穷的量
  • 等价无穷小替换($x \to 0$ 时):$\sin x \sim x$,$\tan x \sim x$,$e^x - 1 \sim x$,$\ln(1+x) \sim x$
fn main() {
    // 验证 lim(x→0) sin(x)/x = 1
    for &h in &[1e-1_f64, 1e-2_f64, 1e-4_f64, 1e-8_f64] {
        println!("sin({:.0e})/{:.0e} = {:.10}", h, h, h.sin() / h);
    }
    // 越接近 0,结果越接近 1
}

二、导数(微分)

2.1 导数的定义

函数 $y = f(x)$ 在某点的导数:

$$f’(x) = \frac{dy}{dx} = \lim_{\Delta x \to 0} \frac{f(x+\Delta x) - f(x)}{\Delta x}$$

几何意义: 曲线在该点的切线斜率。

2.2 基本求导公式

函数导数
$(C)’$$0$(常数函数)
$(x^n)’$$nx^{n-1}$(幂函数)
$(\frac{1}{x})’$$-\frac{1}{x^2}$
$(\sin x)’$$\cos x$
$(\cos x)’$$-\sin x$
$(\tan x)’$$\sec^2 x$
$(\ln x)’$$\frac{1}{x}$
$(\log_a x)’$$\frac{1}{x \ln a}$
$(e^x)’$$e^x$
$(a^x)’$$a^x \ln a$

2.3 微分基本运算法则

法则公式
$(u + v)’ = u’ + v’$
$(u - v)’ = u’ - v’$
乘积$(uv)’ = u’v + uv’$
$\left(\frac{u}{v}\right)’ = \frac{u’v - uv’}{v^2}$
链式法则$\frac{dy}{dx} = \frac{dy}{du} \cdot \frac{du}{dx}$
fn main() {
    // 数值求导:f(x) = sin(x) + x²
    let f = |x: f64| x.sin() + x * x;
    let h = 1e-8;
    let x = 1.0;

    // 数值导数
    let numerical = (f(x + h) - f(x - h)) / (2.0 * h);
    // 解析导数: cos(x) + 2x
    let analytical = x.cos() + 2.0 * x;

    println!("数值导数: {:.10}", numerical);   // 2.5403023059
    println!("解析导数: {:.10}", analytical);   // 2.5403023059
}

2.4 高阶导数

高阶导数是导数的导数:

  • 一阶导数:$f’(x)$(速度)
  • 二阶导数:$f’’(x)$(加速度)
  • 三阶导数:$f’‘’(x)$(急动度/Jerk)

$$f’’(x) = \frac{d}{dx}\left(\frac{d}{dx}f(x)\right) = \frac{d^2 f}{dx^2}$$


三、微分中值定理

3.1 罗尔定理

若 $f(x)$ 在 $[a,b]$ 上连续,在 $(a,b)$ 内可导,且 $f(a) = f(b)$,则在 $(a,b)$ 内至少存在一点 $\xi$,使得 $f’(\xi) = 0$。

3.2 拉格朗日中值定理

若 $f(x)$ 在 $[a,b]$ 上连续,在 $(a,b)$ 内可导,则在 $(a,b)$ 内至少存在一点 $\xi$,使得:

$$f’(\xi) = \frac{f(b) - f(a)}{b - a}$$

几何意义: 曲线上至少有一点处的切线平行于连接两端点的弦。

物理意义: 至少在某一时刻,瞬时速度等于平均速度。

3.3 柯西中值定理

若 $f(x)$ 和 $g(x)$ 都在 $[a,b]$ 上连续,在 $(a,b)$ 内可导,且 $g’(x) \neq 0$,则在 $(a,b)$ 内至少存在一点 $\xi$,使得:

$$\frac{f’(\xi)}{g’(\xi)} = \frac{f(b) - f(a)}{g(b) - g(a)}$$


四、洛必达法则

当 $\lim_{x \to a} \frac{f(x)}{g(x)}$ 为 $\frac{0}{0}$ 或 $\frac{\infty}{\infty}$ 型未定式时:

$$\lim_{x \to a} \frac{f(x)}{g(x)} = \lim_{x \to a} \frac{f’(x)}{g’(x)}$$

前提是右边的极限存在。

fn main() {
    // 求 lim(x→1) sin(πx) / (x² - 1)
    let f = |x: f64| (std::f64::consts::PI * x).sin();
    let g = |x: f64| x * x - 1.0;

    let x = 1.0;
    let h = 1e-8;

    // 直接代入是 0/0 型,使用洛必达法则
    // f'(x) = πcos(πx), g'(x) = 2x
    // lim = πcos(π) / 2 = -π/2
    let limit = (f(x + h) - f(x - h)) / (2.0 * h) / ((g(x + h) - g(x - h)) / (2.0 * h));
    println!("lim = {:.6}", limit);  // -1.570796 ≈ -π/2
}

五、泰勒公式

泰勒公式用多项式逼近函数,是“以直代曲“的数学表达:

$$f(x) \approx f(a) + f’(a)(x-a) + \frac{f’‘(a)}{2!}(x-a)^2 + \frac{f’‘’(a)}{3!}(x-a)^3 + \cdots$$

当 $a = 0$ 时,称为麦克劳林公式

$$f(x) \approx \sum_{n=0}^{\infty} \frac{f^{(n)}(0)}{n!} x^n$$

常用泰勒展开式:

$$\sin x = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!} + \cdots$$

$$\cos x = 1 - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \cdots$$

$$e^x = 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \frac{x^4}{4!} + \cdots$$

$$\ln(1-x) = -\left(x + \frac{x^2}{2} + \frac{x^3}{3} + \frac{x^4}{4} + \cdots\right) \quad (|x| < 1)$$

fn taylor_sin(x: f64, terms: usize) -> f64 {
    let mut sum = 0.0;
    for n in 0..terms {
        let power = 2 * n + 1;
        let coeff = if n % 2 == 0 { 1.0 } else { -1.0 };
        let factorial: f64 = (1..=power).map(|x| x as f64).product();
        sum += coeff * x.powi(power as i32) / factorial;
    }
    sum
}

fn main() {
    let x = std::f64::consts::PI / 4.0; // 45°

    println!("标准库 sin(π/4) = {:.10}", x.sin());
    println!("泰勒 3 项:        {:.10}", taylor_sin(x, 3));
    println!("泰勒 5 项:        {:.10}", taylor_sin(x, 5));
    println!("泰勒 10 项:       {:.10}", taylor_sin(x, 10));
}

六、积分

6.1 不定积分

导数的逆运算。若 $F’(x) = f(x)$,则:

$$\int f(x) dx = F(x) + C$$

其中 $C$ 为积分常数。

6.2 定积分

$$\int_a^b f(x) dx = F(b) - F(a)$$

定积分的几何意义是曲线 $y = f(x)$ 与 $x$ 轴、$x = a$、$x = b$ 所围成区域的有向面积

6.3 基本积分公式

被积函数不定积分
$\int k , dx$$kx + C$
$\int x^n , dx$$\frac{x^{n+1}}{n+1} + C \quad (n \neq -1)$
$\int \frac{1}{x} , dx$$\ln
$\int \sin x , dx$$-\cos x + C$
$\int \cos x , dx$$\sin x + C$
$\int \sec^2 x , dx$$\tan x + C$
$\int e^x , dx$$e^x + C$
$\int \ln x , dx$$x\ln x - x + C$

6.4 换元积分法

$$\int f(g(x)) \cdot g’(x) , dx = \int f(u) , du \quad (u = g(x))$$

6.5 分部积分法

$$\int u , dv = uv - \int v , du$$


七、微积分基本定理(牛顿-莱布尼茨公式)

若 $F(x)$ 是 $f(x)$ 在 $[a,b]$ 上的一个原函数(即 $F’(x) = f(x)$),则:

$$\int_a^b f(x) dx = F(b) - F(a)$$

辛普森积分法

fn simpson_integral(f: impl Fn(f64) -> f64, a: f64, b: f64, n: usize) -> f64 {
    assert!(n % 2 == 0);
    let h = (b - a) / n as f64;
    let mut sum = f(a) + f(b);

    for i in 1..n {
        let x = a + i as f64 * h;
        if i % 2 == 0 { sum += 2.0 * f(x); }
        else { sum += 4.0 * f(x); }
    }

    sum * h / 3.0
}

fn main() {
    // ∫₀¹ x² dx = 1/3
    let result = simpson_integral(|x| x * x, 0.0, 1.0, 100);
    println!("∫₀¹ x² dx = {:.10} (理论值: 0.3333333333)", result);

    // ∫₀^π sin(x) dx = 2
    let result2 = simpson_integral(|x| x.sin(), 0.0, std::f64::consts::PI, 100);
    println!("∫₀π sin(x) dx = {:.10} (理论值: 2)", result2);

    // ∫₀¹ e^x dx = e - 1
    let result3 = simpson_integral(|x| x.exp(), 0.0, 1.0, 100);
    println!("∫₀¹ e^x dx = {:.10} (理论值: {:.10})", result3, std::f64::consts::E - 1.0);
}

八、偏导数与梯度

8.1 偏导数

对于多元函数 $f(x_1, x_2, \ldots, x_n)$,对某个变量的偏导数是固定其他变量后对该变量的导数:

$$\frac{\partial f}{\partial x_i} = \lim_{\Delta x_i \to 0} \frac{f(x + \Delta x_i) - f(x)}{\Delta x_i}$$

8.2 梯度

梯度是所有偏导数组成的向量:

$$\nabla f = \left(\frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, \ldots, \frac{\partial f}{\partial x_n}\right)$$

梯度指向函数值增长最快的方向,其大小是最大增长率。

应用: 偏导数是机器学习模型训练的数学基础。在神经网络中,损失函数 $L$ 对权重 $w$ 的偏导数 $\nabla L(w)$,直接告诉我们应该如何调整权重才能让损失函数下降得最快。

8.3 反向传播

$$\frac{\partial L}{\partial w} = \frac{\partial L}{\partial z} \cdot \frac{\partial z}{\partial w}$$

反向传播利用链式法则,从输出层向输入层逐层计算梯度。


九、牛顿二项式定理与杨辉三角

9.1 牛顿二项式定理

$$(a+b)^n = \sum_{k=0}^{n} \binom{n}{k} a^k b^{n-k}$$

9.2 组合数

$$\binom{n}{k} = \frac{n!}{k!(n-k)!}$$

9.3 杨辉三角的性质

  • 每行数字之和为 $2^n$:$\sum_{k=0}^{n} \binom{n}{k} = 2^n$
  • 对称性:$\binom{n}{k} = \binom{n}{n-k}$
  • 递推关系:$\binom{n}{k} = \binom{n-1}{k-1} + \binom{n-1}{k}$
fn binomial(n: u64, k: u64) -> u64 {
    if k > n { return 0; }
    if k > n - k { k = n - k; } // 利用对称性优化
    let mut result = 1u64;
    for i in 0..k {
        result = result * (n - i) / (i + 1);
    }
    result
}

fn print_pascal(rows: usize) {
    for n in 0..rows {
        for k in 0..=n {
            print!("{:6}", binomial(n as u64, k as u64));
        }
        println!();
    }
}

fn main() {
    print_pascal(10);
}

十、极值问题

10.1 极值的判定

  • 必要条件:若 $f(x)$ 在 $x_0$ 处可导且取得极值,则 $f’(x_0) = 0$
  • 充分条件(第一判别法):$f’(x)$ 在 $x_0$ 两侧变号(左正右负为极大值,左负右正为极小值)
  • 充分条件(第二判别法):$f’(x_0) = 0$ 且 $f’‘(x_0) < 0$ 为极大值,$f’’(x_0) > 0$ 为极小值

10.2 拉格朗日乘子法

用于求解带约束条件的极值问题:

$$\mathcal{L}(x, y, \lambda) = f(x, y) - \lambda \cdot g(x, y)$$

对 $x, y, \lambda$ 分别求偏导并令其为零,解方程组。


十一、蒙特卡洛方法

蒙特卡洛方法利用随机采样来近似计算确定性的数学问题。

用蒙特卡洛方法计算圆周率:

use rand::Rng;
use rand::RngExt;

fn monte_carlo_pi(samples: usize) -> f64 {
    let mut rng = rand::rng();          // thread_rng() → rng()
    let mut inside = 0;

    for _ in 0..samples {
        let x: f64 = rng.random_range(-1.0..1.0);  // gen_range() → random_range()
        let y: f64 = rng.random_range(-1.0..1.0);
        if x * x + y * y <= 1.0 {
            inside += 1;
        }
    }

    4.0 * inside as f64 / samples as f64
}

fn main() {
    let sample_sizes = [1000, 10000, 100000, 1000000];
    
    for &n in &sample_sizes {
        let pi_approx = monte_carlo_pi(n);
        println!("{n:>7} 次采样: π ≈ {pi_approx:.6}");
    }
}

十二、总结

概念要点
极限函数值无限接近某个值
导数变化率,切线斜率
求导法则和差积商、链式法则
中值定理罗尔、拉格朗日、柯西
洛必达法则0/0 或 ∞/∞ 型未定式
泰勒公式多项式逼近函数
不定积分导数的逆运算
定积分面积,牛顿-莱布尼茨公式
偏导数多元函数对某个变量的导数
梯度偏导数向量,指向增长最快方向

微积分是理解连续变化的数学工具。从物理中的运动分析,到机器学习中的梯度下降,微积分的思想无处不在。

练习建议:

  1. 用数值方法验证泰勒公式的精度
  2. 实现蒙特卡洛方法计算定积分
  3. 用梯度下降法求解函数的极小值

学习资源

资源说明
3Blue1Brown - 微积分的本质微积分可视化教程
3Blue1Brown B站中文字幕版
微积分的本质B站系列