更新时间:作者:小小条
第四章 积分应用

积分是微积分的两大支柱之一,与导数互为逆运算。定积分不仅用于计算面积、体积,更是概率论中累积分布函数(CDF)的核心工具。本文系统讲解不定积分、定积分、微积分基本定理、数值积分方法,并重点展示其在连续型概率分布(如正态分布、指数分布)中的应用,配套完整的 Python(SciPy / NumPy / Matplotlib / SymPy)代码实现与可视化。
$ \int f(x) \, dx = F(x) + C, \quad \text{其中 } F'(x) = f(x) $
例:$ \int 2x \, dx = x^2 + C $$ \inta^b f(x) \, dx = \lim{n \to \infty} \sum{i=1}^n f(xi^*) \Delta x $
几何意义:曲线 $ y = f(x) $ 与 $ x $-轴在 $[a, b]$ 间围成的有向面积连接微分与积分的桥梁
若 $ f $ 在 $[a, b]$ 上连续,且 $ F $ 是 $ f $ 的一个原函数,则:
$ \int_a^b f(x) \, dx = F(b) - F(a) $
✅ 这使得定积分可通过求原函数计算,无需极限求和。
对连续型随机变量 \( X \),其概率由概率密度函数(PDF) \( f_X(x) \) 描述:
概率 = PDF 在区间上的定积分$ P(a \leq X \leq b) = \inta^b fX(x) \, dx $
累积分布函数(CDF) 定义为:$ FX(x) = P(X \leq x) = \int{-\infty}^x f_X(t) \, dt $
因此,CDF 就是 PDF 的定积分(从 $-\infty$ 到 $x$)
$ F(x) = \frac{1}{2} \left[ 1 + \operatorname{erf}\left( \frac{x - \mu}{\sigma \sqrt{2}} \right) \right] $
$ F(x) = \int_0^x \lambda e^{-\lambda t} dt = 1 - e^{-\lambda x} $
$ F(x) = \begin{cases} 0 & x < a \\ \frac{x - a}{b - a} & a \leq x \leq b \\ 1 & x > b \end{cases} $
import numpy as npimport matplotlib.pyplot as pltfrom scipy import integratefrom scipy.stats import norm, expon, uniformimport sympy as sp# 设置绘图风格plt.rcParams['figure.figsize'] = (10, 5)
x = sp.symbols('x')# 不定积分expr1 = sp.exp(-x)indef_int = sp.integrate(expr1, x)print("∫ e⁻ˣ dx =", indef_int)# 定积分:指数分布 CDFlam = sp.symbols('λ', positive=True)pdf_exp = lam * sp.exp(-lam * x)cdf_exp = sp.integrate(pdf_exp, (x, 0, x)) # 从 0 到 xprint("指数分布 CDF =", cdf_exp)# 正态分布:无法解析积分pdf_norm = (1/sp.sqrt(2*sp.pi)) * sp.exp(-x**2 / 2)try: cdf_norm = sp.integrate(pdf_norm, (x, -sp.oo, x)) print("标准正态 CDF =", cdf_norm)except Exception as e: print("正态分布无初等原函数 → 需数值方法或 erf")
# 方法1:使用 scipy.stats(推荐)prob1 = norm.cdf(2) - norm.cdf(1)print(f"P(1 ≤ X ≤ 2) via CDF: {prob1:.6f}")# 方法2:直接数值积分 PDFresult, error = integrate.quad(norm.pdf, 1, 2)print(f"P(1 ≤ X ≤ 2) via quad(): {result:.6f} ± {error:.2e}")# 方法3:蒙特卡洛模拟(验证)np.random.seed(42)samples = np.random.normal(0, 1, size=1000000)prob_mc = np.mean((samples >= 1) & (samples <= 2))print(f"P(1 ≤ X ≤ 2) via Monte Carlo: {prob_mc:.6f}")
输出:
P(1 ≤ X ≤ 2) via CDF: 0.135905P(1 ≤ X ≤ 2) via quad(): 0.135905 ± 1.51e-15P(1 ≤ X ≤ 2) via Monte Carlo: 0.135872
x_vals = np.linspace(-4, 4, 400)# 正态分布pdf_vals = norm.pdf(x_vals)cdf_vals = norm.cdf(x_vals)plt.figure(figsize=(12, 4))# PDF + 阴影区域plt.subplot(1, 2, 1)plt.plot(x_vals, pdf_vals, 'b-', label='PDF')# 阴影 P(1 ≤ X ≤ 2)x_fill = np.linspace(1, 2, 100)plt.fill_between(x_fill, norm.pdf(x_fill), color='orange', alpha=0.5, label='P(1≤X≤2)')plt.title('概率密度函数(PDF)')plt.xlabel('x'); plt.ylabel('f(x)')plt.legend(); plt.grid(True)# CDFplt.subplot(1, 2, 2)plt.plot(x_vals, cdf_vals, 'r-', label='CDF')plt.axvline(1, color='gray', linestyle='--')plt.axvline(2, color='gray', linestyle='--')plt.scatter([1, 2], [norm.cdf(1), norm.cdf(2)], color='red')plt.title('累积分布函数(CDF)')plt.xlabel('x'); plt.ylabel('F(x)')plt.legend(); plt.grid(True)plt.tight_layout()plt.show()
左图:概率 = 曲线下面积;右图:CDF 差值 = 区间概率。
假设 PDF 为 $ f(x) = \frac{3}{4}(1 - x^2),\ -1 \leq x \leq 1 $
def custom_pdf(x): return 0.75 * (1 - x**2) * ((x >= -1) & (x <= 1))# 验证归一化:∫ f(x) dx = 1total_prob, _ = integrate.quad(custom_pdf, -1, 1)print(f"总概率(应为1): {total_prob:.6f}")# 计算 CDF 函数(数值积分)def custom_cdf(x): if x < -1: return 0.0 elif x > 1: return 1.0 else: result, _ = integrate.quad(custom_pdf, -1, x) return result# 向量化custom_cdf_vec = np.vectorize(custom_cdf)x_plot = np.linspace(-2, 2, 400)pdf_plot = custom_pdf(x_plot)cdf_plot = custom_cdf_vec(x_plot)plt.figure(figsize=(10, 4))plt.subplot(1, 2, 1)plt.plot(x_plot, pdf_plot, 'b-')plt.title('自定义 PDF')plt.grid(True)plt.subplot(1, 2, 2)plt.plot(x_plot, cdf_plot, 'r-')plt.title('自定义 CDF(数值积分)')plt.grid(True)plt.tight_layout()plt.show()
计算 $ P(X \leq 0, Y \leq 0) $ 对于标准二维正态分布(独立)
from scipy.stats import multivariate_normal# 联合 PDFmean = [0, 0]cov = [[1, 0], [0, 1]] # 独立rv = multivariate_normal(mean, cov)# 方法1:直接使用 CDF(scipy 支持)prob_joint = rv.cdf([0, 0])print(f"P(X≤0, Y≤0) = {prob_joint:.6f} (应为 0.25)")# 方法2:双重数值积分def joint_pdf(y, x): # 注意 integrate.dblquad 顺序 return rv.pdf([x, y])result2d, err2d = integrate.dblquad( joint_pdf, -np.inf, 0, # x 从 -∞ 到 0 lambda x: -np.inf, lambda x: 0 # y 从 -∞ 到 0)print(f"双重积分结果: {result2d:.6f} ± {err2d:.2e}")
# 换元法:∫ 2x cos(x²) dxexpr_sub = 2*x * sp.cos(x**2)int_sub = sp.integrate(expr_sub, x)print("换元法示例:", int_sub) # sin(x²) + C# 分部积分:∫ x e^x dxexpr_part = x * sp.exp(x)int_part = sp.integrate(expr_part, x)print("分部积分示例:", int_part) # (x - 1)e^x + C
当无法解析积分时,常用数值方法:
方法 | 原理 | Python 函数 |
梯形法则 | 用梯形近似曲边梯形 | np.trapz |
辛普森法则 | 用抛物线近似 | scipy.integrate.simps |
自适应高斯-克朗罗德 | 自动调整精度 | scipy.integrate.quad(默认) |
# 比较不同数值积分方法x_fine = np.linspace(0, 2, 1000)y_fine = norm.pdf(x_fine)trapz_result = np.trapz(y_fine, x_fine)simps_result = integrate.simps(y_fine, x_fine)quad_result, _ = integrate.quad(norm.pdf, 0, 2)print(f"梯形法则: {trapz_result:.6f}")print(f"辛普森法则: {simps_result:.6f}")print(f"quad()(高精度): {quad_result:.6f}")
概念 | 数学表达 | Python 实现 |
概率 | $ P(a \leq X \leq b) = \int_a^b f(x) dx $ | integrate.quad(pdf, a, b) |
CDF | $ F(x) = \int_{-\infty}^x f(t) dt $ | dist.cdf(x) |
期望 | $\mathbb{E}[X] = \int x f(x) dx $ | dist.mean() 或 integrate.quad(lambda x: x*pdf(x), ...) |
方差 | $ \text{Var}(X) = \int (x - \mu)^2 f(x) dx $ | dist.var() |
关键洞见:
所有连续概率计算本质都是定积分;正态分布等重要分布的 CDF 无初等表达式,依赖特殊函数(erf)或数值积分;SciPy 的 scipy.stats 封装了常见分布的 PDF/CDF/数值积分,优先使用;自定义分布时,可用 integrate.quad 构建 CDF。
掌握积分,从概率密度到实际概率,为统计推断、机器学*(如变分推断)、金融工程等打下坚实基础。
python过渡项目部分代码已经上传至gitee,后续会逐步更新。
公众号:咚咚王 gitee:
https://gitee.com/wy18585051844/ai_learning
《Python编程:从入门到实践》 《利用Python进行数据分析》 《算法导论中文第三版》 《概率论与数理统计(第四版) (盛骤) 》 《程序员的数学》 《线性代数应该这样学第3版》 《微积分和数学分析引论》 《(西瓜书)周志华-机器学*》 《TensorFlow机器学*实战指南》 《Sklearn与TensorFlow机器学*实用指南》 《模式识别(第四版)》 《深度学* deep learning》伊恩·古德费洛著 花书 《Python深度学*第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》 《深入浅出神经网络与深度学*+(迈克尔·尼尔森(Michael+Nielsen)》 《自然语言处理综论 第2版》 《
Natural-Language-Processing-with-PyTorch》 《计算机视觉-算法与应用(中文版)》 《Learning OpenCV 4》 《AIGC:智能创作时代》杜雨+&+张孜铭 《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》 《从零构建大语言模型(中文版)》 《实战AI大模型》 《AI 3.0》
版权声明:本文转载于今日头条,版权归作者所有,如果侵权,请联系本站编辑删除