本项目为《数学思维实践》课程 (CST4822A) 的 CDIO 二级项目实践,围绕线性代数、离散数学和概率论与数理统计三个核心数学领域,完成从工程建模、算法实现、可视化验证到结果分析的完整流程。每个任务均采用 “数学模型层 — 计算实现层 — 可视化验证层” 的统一结构,强调数学知识与编程实践的结合。
-
目标:将实际问题或模拟场景表示为线性方程组
$Ax = b$ ,使用迭代法 (Jacobi 或 Gauss-Seidel) 求解,并分析收敛性与误差。 -
实现:
-
设置初值、误差阈值和最大迭代次数。
-
记录每步残差,比较不同迭代方法的收敛速度。
-
-
可视化:
-
系数矩阵结构热力图 (展示稀疏性或元素分布)。
-
迭代误差随步数变化的收敛曲线。
-
数值解与直接求解 (如
numpy.linalg.solve) 的对比图。
-
-
分析:讨论矩阵性质 (如对角占优、条件数) 对迭代收敛的影响,以及不同方法的效率差异。
-
目标:设计一个三控开关逻辑,使得任意一个开关状态发生变化时,灯的输出状态均切换 (即异或逻辑的推广)。
-
实现:
-
枚举三个开关
$S_1, S_2, S_3$ 的全部 8 种状态 (0 / 1)。 -
建立真值表,推导灯输出
$L$ 的布尔表达式 (如$L = S_1 \oplus S_2 \oplus S_3$ )。 -
编写程序验证任意单开关切换时输出是否正确翻转。
-
-
可视化:
-
状态空间图 (展示 8 个状态及其转移关系)。
-
真值表颜色矩阵 (用颜色表示输出 0 / 1)。
-
逻辑门结构图 (可选)。
-
-
分析:验证布尔表达式的正确性,确认程序输出与真值表完全一致,并讨论逻辑简洁性。
-
目标:基于样本数据,使用 Bootstrap 重采样方法估计总体统计量 (如均值、中位数或比例),并计算置信区间,量化估计不确定性。
-
实现:
-
从原始样本中有放回地重采样
$B$ 次 (如 1000 次),每次采样大小与原样本相同。 -
计算每个 Bootstrap 样本的统计量,得到经验分布。
-
计算点估计 (如原始样本统计量) 和百分位数置信区间 (如 95%)。
-
-
可视化:
-
原始样本分布图 (直方图或箱线图)。
-
Bootstrap 统计量分布直方图 / 密度曲线。
-
置信区间示意图 (标明上下限)。
-
-
分析:解释点估计和置信区间的含义,评估估计稳定性 (如标准误),讨论 Bootstrap 方法在该问题中的适用性与局限性。
math-thinking-practice/
├── .gitignore # Git 忽略规则
├── .python-version # Python 版本锁定 (3.13)
├── LICENSE # MIT 许可证
├── README.md # 项目说明文档
├── pyproject.toml # 项目元数据与依赖 (PEP 621)
├── requirements.txt # 依赖清单 (pip 安装用)
├── main.py # 统一入口:依次运行三个任务
├── data/ # 样本数据
│ └── sample_data.csv # 任务三使用的原始数据集
├── figures/ # 所有生成图表 (自动输出)
│ ├── task1_heatmap.png # 任务一:矩阵热力图
│ ├── task1_convergence.png # 任务一:收敛曲线
│ ├── task1_comparison.png # 任务一:数值解对比
│ ├── task2_truth_table.png # 任务二:真值表颜色矩阵
│ ├── task2_state_space.png # 任务二:状态空间图
│ ├── task2_transition.png # 任务二:状态切换路径
│ ├── task3_original_dist.png # 任务三:原始样本分布
│ ├── task3_bootstrap_dist.png # 任务三:Bootstrap 统计量分布
│ └── task3_ci.png # 任务三:置信区间示意图
├── reports/ # 报告文档
│ ├── 实践报告.md # 完整报告 (按模板)
│ └── 实践过程.md # 过程记录 (按模板)
└── tasks/ # 所有实验任务
├── __init__.py
├── task1_iterative/ # 任务一:迭代法解线性方程组
│ ├── __init__.py
│ ├── solver.py # Jacobi / Gauss-Seidel 实现
│ ├── visualize.py # 生成任务一的全部图表
│ └── test_solver.py # 单元测试 (pytest)
├── task2_three_switch/ # 任务二:三控开关逻辑
│ ├── __init__.py
│ ├── logic.py # 真值表、布尔表达式、状态枚举
│ ├── visualize.py # 生成任务二的全部图表
│ └── test_logic.py # 验证逻辑正确性
└── task3_bootstrap/ # 任务三:Bootstrap 估计
├── __init__.py
├── bootstrap.py # 重采样、统计量、置信区间
├── visualize.py # 生成任务三的全部图表
└── test_bootstrap.py # 稳定性测试
核心目录说明如下:
-
tasks/—— 三个任务的独立模块,每个任务包含算法实现、可视化和测试脚本。 -
data/—— 存放任务三所需的原始样本数据 (CSV 格式)。 -
figures/—— 所有任务生成的可视化图表 (自动输出)。 -
reports/—— 实践报告与实践过程文档 (Markdown 格式,按课程模板填写)。 -
main.py—— 统一入口,可一键运行全部任务并生成图表。
本项目使用 Python 3.13,主要依赖库:
-
numpy—— 数值计算 -
matplotlib—— 绘图
方式一 (使用 pip + requirements.txt):
pip install -r requirements.txt方式二 (使用 pyproject.toml,推荐):
pip install -e .requirements.txt 内容示例:
numpy>=1.24
matplotlib>=3.7
pandas>=2.0
seaborn>=0.12
在项目根目录下执行:
python main.py该脚本会依次执行三个任务的 visualize.py,生成所有图表并保存至 figures/,同时将关键结果打印到控制台。
进入 tasks/ 下对应任务文件夹,运行其可视化脚本:
cd tasks/task1_iterative
python visualize.py每个任务的 visualize.py 独立运行,不会干扰其他任务。
使用 pytest 进行各模块的单元测试 (需先安装 pytest):
pytest tasks/task1_iterative/test_solver.py
pytest tasks/task2_three_switch/test_logic.py
pytest tasks/task3_bootstrap/test_bootstrap.py-
reports/实践报告.md:按照课程提供的报告模板,完整填写三个任务的模型建立、算法实现、可视化图表和结果分析。 -
reports/实践过程.md:记录资料查阅、问题解决、分工协作和阶段性推进情况,体现项目实施的完整过程。
建议使用 Markdown 编辑器 (如 Typora、VS Code) 编写,并导出为 PDF 提交。所有图表均在 figures/ 中,可直接在报告中引用 (相对路径)。
-
若需修改算法参数 (如迭代误差阈值、Bootstrap 重采样次数),请直接编辑各任务模块中的常量定义 (通常位于
solver.py/bootstrap.py文件头部)。 -
所有随机过程 (如 Bootstrap 重采样) 均设置了随机种子 (
np.random.seed(42)),以保证结果可重复。 -
图表输出格式默认为 PNG,分辨率 300 dpi,可在可视化脚本中调整。
本项目采用 MIT 许可证,详情请参阅 LICENSE 文件。
-
小组:第 X 组 (请填写实际组号)
-
成员:XXX、XXX、XXX (请填写真实姓名)
感谢《数学思维实践》课程提供的任务书、报告模板及指导要求,使本项目得以规范开展。