数学建模教程系列——序言

动机

数学建模竞赛中,参赛者最常遇到的困境不是"不会公式",而是"不知道怎么把公式变成代码跑出来"。学了高等数学、线性代数、概率论,知道 ARIMA 的概念、知道什么是线性规划、了解 K-Means 的思想,但比赛拿到题目后,面对空白的 Python 编辑器仍然不知从何下手。

本系列教程的定位正是填补数学公式与可运行代码之间的鸿沟。我们不推导算法的数学证明,而是聚焦于:给你一个明确的建模问题,告诉你用哪个 Python 库、怎么写代码、结果怎么解读、图表怎么画到论文里。

选择 Python 作为载体,是因为它拥有最成熟的科学计算生态——每个库解决一类明确的建模问题,安装即用,学完就能上场比赛。以"库"为纲组织内容,是因为这是最贴近实战的学习方式:遇到规划问题就去 PuLP 篇查模板,遇到时间序列就去 statsmodels 篇套流程。

系列全景

本系列目前包含 11 篇教程,覆盖从数据导入到模型求解到论文配图的完整流程:

层级

篇目

核心库

解决什么问题

入门

Python 环境配置指南

从零搭建开发环境

入门

Matplotlib 绘图入门

matplotlib

论文配图与结果可视化

入门

NumPy 和 Pandas 数据处理

numpy, pandas

数据清洗与探索性分析

基础

PuLP 求解规划模型

pulp

线性规划、整数规划精确求解

基础

Statsmodels 求解回归模型

statsmodels

统计推断、显著性分析、模型诊断

基础

Scikit-learn 聚类与主成分分析

scikit-learn

无监督学习、聚类分析、降维

基础

SciPy 求解微分方程数值解

scipy.integrate

动态系统、传染病模型、振动问题

基础

Statsmodels 求解时间序列模型

statsmodels.tsa

ARIMA、SARIMA、指数平滑等经典时序预测

提高

Scikit-learn 传统机器学习模型

scikit-learn

线性回归、逻辑回归、SVM、随机森林等监督学习

提高

SciPy 智能优化

scipy.optimize

无约束优化、约束优化、差分进化、模拟退火

提高

机器学习与深度学习时间序列预测

xgboost, lightgbm, torch

XGBoost、LSTM、GRU、TCN 等复杂非线性时序预测

这些篇目之间是互补而非替代的关系。例如:

  • statsmodels 回答"X 对 Y 是否有显著影响"(统计推断),scikit-learn 回答"怎样预测得最准"(预测精度)

  • PuLP 给出规划问题的精确最优解,scipy.optimize 处理 PuLP 无法表达的非线性目标函数

  • 基础篇的 ARIMA/SARIMA 适合平稳或可平稳化的单变量序列,提高篇的树模型和深度学习模型适合多变量、非线性的复杂时序

每篇教程都遵循统一的结构:前言导读 → 概念简述 → API 详解 → 实战案例 → 速查表。

学习路线

根据你的基础和目标,推荐三条学习路径:

零基础路线(刚接触 Python):环境配置 → Matplotlib → NumPy/Pandas → 按需选读基础篇各章。这三篇是所有后续内容的前置基础,建议完整通读。

有基础路线(会用 pandas,参加过一次数模):跳过入门篇,直接进基础篇。按你常遇到的赛题类型选读——规划题看 PuLP、预测题看 statsmodels 时间序列、分类题看 sklearn 机器学习、动态系统看 SciPy 微分方程。

进阶路线(已有基线模型,想提升效果):重点学习提高篇三篇。推荐先掌握 XGBoost/LightGBM 树模型(上手快、效果好),再学习 scipy.optimize 的全局优化方法(差分进化、模拟退火),最后根据赛题需要选读 LSTM/GRU/TCN 深度学习模型。

各篇内部的章节相对独立,支持"工具书用法"——比赛时直接跳到对应章节查找代码模板,替换数据即可套用。

持续更新

本系列教程是持续拓展的。目前的内容已经覆盖了数据处理、可视化、回归、分类、聚类、降维、规划、微分方程、时间序列等主要建模方向,但数学建模涉及的工具和方法远不止于此。

如果你在阅读后有任何想补充的内容方向——比如图论与网络分析、灰色预测模型、马尔可夫链、模糊综合评价、元胞自动机、蒙特卡洛模拟、博弈论模型、排队论,或者其他任何你觉得实用但本系列尚未覆盖的方法——欢迎在评论区提出你的需求。

本系列会根据读者的反馈不断扩展,目标是成为一份真正全面的数模 Python 工具手册。