主页 模型库 竞赛 学习中心 工具箱 论文库 前沿 建模空间 AI建模
Data Collection

数据收集技巧

建模前先把数据来源分层:优先使用权威原始数据,再用数据库和学术资料补充变量,最后借助 AI 检索扩展线索并逐项核验。

适合选题调研与论文数据准备
🏛️

官方网站

从政府、行业协会、国际组织和企业年报获取一手数据,记录发布时间、统计口径和下载链接。

🗄️

公开数据库

用 Kaggle、UCI、World Bank、国家统计平台等数据库快速定位可复用数据,并检查字段说明与许可。

🎓

学术网站

通过 Google Scholar、arXiv、知网、期刊附录和作者主页寻找论文配套数据、变量定义和基准方法。

🤖

AI 检索

让 AI 帮你生成关键词、列出可能来源和检索式,但所有链接、数值和引用都要回到原站核验。

1. 先定义变量 把问题拆成因变量、自变量、控制变量和时间/空间尺度,避免盲目找数据。
2. 建来源清单 按权威性、更新频率、可下载性和引用规范打分,保留备用来源。
3. 做质量检查 检查缺失值、异常值、单位、采样偏差与版权许可,并在论文中说明处理方式。
Data Analysis

数据分析与处理方法

拿到数据后,不要急着套模型。先完成清洗、探索、特征处理和验证记录,让数据能够支撑可信的建模结论。

从原始数据到可建模数据集

🧹数据清洗

统一字段名、单位和时间口径,处理重复值、缺失值、异常值与明显录入错误,保留清洗日志。

🔎探索性分析

用分布图、箱线图、相关矩阵和分组统计观察趋势、离群点、变量关系与潜在分层结构。

🧪特征处理

按模型需要做标准化、归一化、编码、滞后变量、交互项、降维或指标合成,避免引入数据泄露。

📈统计建模

根据问题选择描述统计、假设检验、回归、聚类、时间序列或分类预测,并设置可解释的基线模型。

验证复现

划分训练/测试或交叉验证,记录随机种子、指标、参数和版本,确保结果可以复查与复现。

1
先画图再建模:至少查看目标变量分布、关键自变量分布和两两关系,避免被均值或少数异常点误导。
2
先保留原始表,再生成处理表:任何删除、填补、变换都应可追踪,方便论文说明和结果复核。
3
先做简单基线,再上复杂模型:复杂方法必须相对均值、线性回归或朴素规则体现真实增益。
4
先解释指标含义,再报告数值:RMSE、MAE、R²、准确率、F1 等指标要与业务问题和模型目标对应。
Python Learning Path

Python 建模编程系统课

从基础语法到 NumPy、Pandas、Matplotlib、SciPy、scikit-learn、CVXPY、NetworkX 等建模库,按真实建模流程学习数据处理、数值求解、可视化、优化与机器学习。

学习中心新增
语法到数据用列表、字典、函数、文件读取和 Pandas 表格处理竞赛附件。
数据到模型用 NumPy、SciPy、CVXPY、PuLP 等把公式、变量和约束写成可求解程序。
模型到论文用 Matplotlib、统计指标和复现实验支撑论文图表与结果解释。
进入 Python 建模编程 →

🎯 交互式代码演示

调整参数,实时查看算法运行结果可视化

📐

线性规划求解

scipy.optimize.linprog

📈

回归分析拟合

sklearn.linear_model

🎯

K-Means聚类

sklearn.cluster

函数优化

scipy.optimize.minimize

🔢

矩阵运算

numpy.linalg

数值积分

scipy.integrate

🔄

微分方程

scipy.integrate.odeint

🎲

概率分布

scipy.stats

〰️

插值拟合

scipy.interpolate

🎯

蒙特卡洛

随机模拟方法

🌊

傅里叶变换

numpy.fft

x + y
x + y ≤
x + y ≤
50
2
2
100
-1
2
3
[ , ]
50
500
10
2000
50Hz
120Hz
0.5
📄 Python 代码
from scipy.optimize import linprog
import numpy as np

# 目标函数: max 3x + 4y → min -3x - 4y
c = [-3, -4]

# 约束条件
A = [[2, 1], [1, 2]]
b = [100, 100]

# 求解
result = linprog(c, A_ub=A, b_ub=b, bounds=[(0, None), (0, None)])

print(f"最优解: x={result.x[0]:.2f}, y={result.x[1]:.2f}")
print(f"最大收益: {-result.fun:.2f}")
📊 运行结果可视化

点击「运行」查看可视化结果

将展示可行域、最优解点和目标函数等高线

🔢

NumPy

科学计算基础库,提供多维数组对象和各种数学函数

📦 pip install numpy ⭐ 必学
📊

Pandas

数据处理和分析库,提供DataFrame数据结构

📦 pip install pandas ⭐ 必学
📈

Matplotlib

数据可视化库,绘制各种静态、动态图表

📦 pip install matplotlib ⭐ 必学
🎯

SciPy

科学计算工具集,优化、积分、插值、信号处理

📦 pip install scipy ⭐ 必学
🔬

Scikit-learn

机器学习库,提供各种算法和模型评估工具

📦 pip install scikit-learn ⭐ 进阶
🌐

NetworkX

图论和网络分析库,处理复杂网络结构

📦 pip install networkx ⭐ 进阶
🔣

SymPy

符号计算库,进行公式推导、微积分解析求解

📦 pip install sympy ⭐ 进阶
📊

Plotly

交互式可视化库,支持3D图表和动态图形

📦 pip install plotly ⭐ 进阶
🎨

Seaborn

统计可视化库,基于Matplotlib提供更美观的图表

📦 pip install seaborn ⭐ 推荐
📈

Statsmodels

统计建模库,提供回归模型、时间序列分析、假设检验

📦 pip install statsmodels ⭐ 进阶
⚙️

PuLP

线性规划库,更简洁的优化问题建模方式

📦 pip install pulp ⭐ 推荐
📄 线性规划求解示例
Python
from scipy.optimize import linprog
import numpy as np

# 定义目标函数系数 (最小化问题)
c = [-3, -4]  # max 3x + 4y 转换为 min -3x - 4y

# 不等式约束: A_ub @ x <= b_ub
A = [[2, 1],    # 2x + y <= 100
     [1, 2]]    # x + 2y <= 100
b = [100, 100]

# 变量范围
x_bounds = (0, None)
y_bounds = (0, None)

# 求解
result = linprog(c, A_ub=A, b_ub=b, 
                 bounds=[x_bounds, y_bounds],
                 method='highs')

print(f"最优解: x={result.x[0]:.2f}, y={result.x[1]:.2f}")
print(f"最大收益: {-result.fun:.2f}")
print(f"求解状态: {'成功' if result.success else '失败'}")
📄 数据可视化示例
Python
import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 生成数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# 创建图形
fig, axes = plt.subplots(1, 2, figsize=(12, 4))

# 子图1: 线图
axes[0].plot(x, y1, label='sin(x)', color='#b85c2a')
axes[0].plot(x, y2, label='cos(x)', color='#1a6e6a')
axes[0].set_title('三角函数')
axes[0].legend()
axes[0].grid(True, alpha=0.3)

# 子图2: 散点图
np.random.seed(42)
x_scatter = np.random.randn(100)
y_scatter = np.random.randn(100)
axes[1].scatter(x_scatter, y_scatter, alpha=0.6, c='#b85c2a')
axes[1].set_title('随机散点')
axes[1].set_xlabel('X轴')
axes[1].set_ylabel('Y轴')

plt.tight_layout()
plt.savefig('output.png', dpi=300, bbox_inches='tight')
plt.show()

📝 NumPy 速查表

np.array([1,2,3])

创建数组

np.zeros((3,3))

零矩阵

np.ones((3,3))

全1矩阵

np.eye(3)

单位矩阵

np.dot(A, B)

矩阵乘法

np.linalg.inv(A)

矩阵求逆

np.linalg.eig(A)

特征值分解

np.mean(arr)

平均值

🧮

Optimization Toolbox

优化工具箱,求解线性规划、非线性规划、整数规划

🔧 linprog, intlinprog ⭐ 必学
📊

Statistics Toolbox

统计工具箱,回归分析、假设检验、概率分布

🔧 fitlm, regress ⭐ 必学
🎲

Curve Fitting Toolbox

曲线拟合工具箱,数据拟合和插值

🔧 fit, interp1 ⭐ 进阶
📄 MATLAB 线性规划
MATLAB
% 目标函数系数 (最小化)
f = [-3; -4];  % max 3x + 4y

% 不等式约束 A*x <= b
A = [2, 1;
     1, 2];
b = [100; 100];

% 变量下界
lb = [0; 0];

% 求解
[x, fval] = linprog(f, A, b, [], [], lb);

fprintf('最优解: x=%.2f, y=%.2f\n', x(1), x(2));
fprintf('最大收益: %.2f\n', -fval);
📊

ggplot2

强大的数据可视化包,基于图形语法创建复杂图表

📦 install.packages('ggplot2') ⭐ 必学
🔬

dplyr

数据处理和操作包,提供简洁的动词函数语法

📦 install.packages('dplyr') ⭐ 必学
📈

lm/glm

内置线性模型和广义线性模型函数

🔧 stats包内置 ⭐ 必学
🧮

forecast

时间序列预测包,提供ARIMA、指数平滑等方法

📦 install.packages('forecast') ⭐ 推荐
📋

knitr

动态报告生成工具,将R代码与LaTeX/Markdown结合

📦 install.packages('knitr') ⭐ 进阶
🌐

igraph

图论和网络分析包,处理复杂网络结构

📦 install.packages('igraph') ⭐ 进阶
📄 R语言线性规划
R
# 使用 lpSolve 包
library(lpSolve)

# 目标函数系数 (最大化问题)
f.obj <- c(3, 4)

# 约束矩阵
f.con <- matrix(c(2, 1,
                  1, 2), nrow = 2, byrow = TRUE)

# 约束方向
f.dir <- c("<=", "<=")

# 约束右侧值
f.rhs <- c(100, 100)

# 求解
result <- lp("max", f.obj, f.con, f.dir, f.rhs)

cat("最优解:", result$solution, "\n")
cat("最大值:", result$objval, "\n")
📄 R语言回归分析
R
# 线性回归模型
model <- lm(mpg ~ wt + hp + cyl, data = mtcars)

# 查看结果
summary(model)

# 回归诊断
par(mfrow = c(2, 2))
plot(model)

# 预测
new_data <- data.frame(wt = 3.0, hp = 150, cyl = 6)
prediction <- predict(model, new_data, interval = "confidence")
print(prediction)

📐 常用数学公式

$x^2 + y^2 = z^2$

上标

$x_{i,j}$

下标

$\frac{a}{b}$

分数

$\sum_{i=1}^{n}$

求和

$\int_{a}^{b}$

积分

$\alpha, \beta, \gamma$

希腊字母

$\rightarrow, \Rightarrow$

箭头

$\infty, \forall, \exists$

无穷、任意、存在

$\sqrt{x}, |x|$

根号、绝对值

$\hat{y}, \bar{x}, \tilde{y}$

帽子、均值、波浪号

$\binom{n}{k}$

二项式系数

$\prod_{i=1}^{n}$

连乘

$\lim_{x\to\infty}$

极限

📋 常用算法模板

\begin{algorithm}...\end{algorithm}

需要 \usepackage{algorithm, algorithmic} 宏包,用于伪代码和算法描述

\begin{figure}[htbp]\centering\includegraphics{...}\caption{...}\end{figure}

插入图片,需配合 \usepackage{graphicx}

\begin{tabular}{lcr}...\end{tabular}

表格环境,l/c/r 分别表示左对齐/居中/右对齐

📄 论文模板片段
LaTeX
\documentclass[12pt,a4paper]{article}
\usepackage[UTF8]{ctex}
\usepackage{amsmath,amsfonts,amssymb}
\usepackage{graphicx}
\usepackage{booktabs}

\title{数学建模论文标题}
\author{团队成员}
\date{\today}

\begin{document}

\maketitle

\begin{abstract}
本文针对XXX问题,建立了XXX模型...
\end{abstract}

\section{问题重述}

\section{模型假设}
\begin{enumerate}
    \item 假设一
    \item 假设二
\end{enumerate}

\section{符号说明}
\begin{table}[h]
\centering
\begin{tabular}{ccc}
\toprule
符号 & 含义 & 单位 \\
\midrule
$x$ & 决策变量 & 个 \\
$v$ & 速度 & m/s \\
\bottomrule
\end{tabular}
\end{table}

\end{document}
📄

数学建模论文 LaTeX 模板

包含完整格式设置、常用宏包、封面模板,适合CUMCM/美赛

查看
📊

Python 代码模板合集

常用模型代码模板:线性规划、回归分析、AHP/TOPSIS评价、数据可视化

查看
📈

Matplotlib 图表模板

折线图、散点图、柱状图、热力图、3D图、子图布局模板

查看
📝

MATLAB 优化工具箱指南

linprog, intlinprog, fmincon等优化函数速查和示例代码

查看
📋

论文写作检查清单

摘要、问题重述、模型假设、符号说明、灵敏度分析、参考文献

查看
🔢

优化问题模板集

线性规划、整数规划、非线性规划、动态规划、启发式算法代码框架

查看
📈

预测问题模板集

时间序列(ARIMA/SARIMA)、回归分析、灰色预测GM(1,1)、LSTM代码框架

查看

评价问题模板集

AHP层次分析法、熵权法、TOPSIS、模糊综合评价、DEA数据包络分析

查看
📚

学习资源推荐

数学建模经典书籍、在线课程、官方文档、博客和社区推荐

查看

📚 推荐书籍

《数学建模算法与应用》- 司守奎

国内经典建模教材,涵盖优化、预测、评价、图论等主流算法,MATLAB实现

《Python科学计算》- 张若愚

NumPy, SciPy, Matplotlib, Pandas等Python科学计算生态的权威指南

《统计学习导论》- James, Witten, Hastie, Tibshirani

机器学习入门经典,线性回归、分类、重采样方法、树模型等

《时间序列分析》- 汉密尔顿

时间序列分析权威参考书,ARIMA、VAR、协整等模型详解

《Data Mining: Concepts and Techniques》- Han, Kamber, Pei

数据挖掘经典教材,适合大数据建模和机器学习应用

📥 电子书下载

Principles of Mathematical Modeling - C. Dym (2006)

数学建模原理入门经典,从基本思想到实际应用

下载 PDF →
An Introduction to Mathematical Modeling - Edward A. Bender (1978)

数学建模经典入门教程,离散模型和连续模型分析

下载 PDF →
Mathematical Modeling - Mark M. Meerschaert (2013)

数学建模全面教程,从基础到高级应用

下载 PDF →
Mathematical Modeling and Simulation - Kai Velten (2009)

科学与工程中的数学建模与仿真方法

下载 PDF →
Mathematical Modeling in the Social and Life Sciences - Michael Olinick (2014)

社会科学和生命科学中的数学建模应用

下载 PDF →
Models for Life - Jeffrey T. Barton (2016)

使用Excel进行离散数学建模的实用指南

下载 PDF →
Mathematical Modeling with GeoGebra - Jonas Hall & Thomas Lingefjard (2016)

使用GeoGebra进行数学建模的可视化应用

下载 PDF →
SIAM建模与评估教育指南 (第2版)

SIAM发布的数学建模教育评估标准指南

下载 PDF →
SIAM建模指南

SIAM官方发布的数学建模指南文档

下载 PDF →

🌐 在线资源

scipy.org

SciPy官方文档,优化、积分、信号处理等数学工具详解

pandas.pydata.org

Pandas官方文档,数据处理和分析的完整参考

scikit-learn.org

Scikit-learn官方文档,机器学习算法和模型评估工具

kaggle.com/learn

Kaggle学习平台,免费Python、机器学习、数据可视化课程

archive.ics.uci.edu

UCI机器学习仓库,600+免费公开数据集

mathworks.com/help

MATLAB官方文档,所有工具箱的完整参考手册

🌐 数学建模在线学习网站

COMAP Contest Resources 竞赛入门

查看 MCM/ICM 与 HiMCM 相关说明、往年赛题和建模教育资源,适合作为备赛入口。

打开网站 →
SIAM MathWorks M3 Challenge 建模案例

包含真实问题、优秀论文、评分指南和建模手册,适合学习完整建模报告结构。

打开网站 →
MIT OpenCourseWare 数学基础

系统补齐线性代数、微分方程、概率统计和优化基础,适合从模型原理往下扎根。

打开网站 →
Khan Academy 基础巩固

用短视频和练习巩固代数、微积分、概率统计等先修知识,适合碎片化补弱项。

打开网站 →
3Blue1Brown 可视化理解

用动画理解线性代数、微积分和神经网络中的核心概念,适合建立直觉。

打开网站 →
Kaggle Learn 数据建模

通过短课程练习 Python、Pandas、可视化、机器学习和特征工程,适合快速上手数据题。

打开网站 →
Google Colab 在线编程

无需本地安装即可运行 Python Notebook,适合团队共享代码、复现实验和快速验证模型。

打开网站 →
Google OR-Tools 优化求解

学习线性规划、整数规划、路径规划、排班和约束优化,适合复杂优化类建模题。

打开网站 →

🎓 在线课程推荐

Coursera: Machine Learning - 吴恩达

机器学习入门课程,线性回归、逻辑回归、神经网络、SVM等算法详解

B站:数学建模系列课程

免费中文课程,涵盖MATLAB/Python建模、优化算法、评价模型等

中国大学MOOC:数学建模

国内高校官方课程,系统学习建模思想和方法

DataCamp: Python数据科学轨迹

交互式Python学习平台,适合入门到进阶

📐 数学基础 - 建模的基石

数学是数学建模的核心语言。本模块整理了建模竞赛中最常用的三大数学基础:线性代数微积分概率统计, 每个知识点都配有理论讲解、Python代码实现和交互式可视化演示,帮助您从理论到实践全面掌握。

📖 详细数学基础教程(推荐)

包含完整的理论推导、公式讲解、交互式可视化和Python代码示例

进入数学基础教程 →
🔢

线性代数

矩阵运算、特征值分解、向量空间,是评价模型、主成分分析的基础

微积分

导数、积分、微分方程,描述变化率和累积过程,是优化和动力学模型的基础

🎲

概率统计

随机变量、假设检验、回归分析,处理不确定性和数据推断的核心工具

🔢 线性代数核心知识点

线性代数是处理多变量问题和矩阵运算的基础,在评价模型、主成分分析(PCA)、马尔可夫链中广泛应用

1. 矩阵基本运算

A + B, A - B

矩阵加减法:对应元素相加减,要求维度相同

np.dot(A, B) 或 A @ B

矩阵乘法:A的列数等于B的行数,不满足交换律

A.T

矩阵转置:行列互换,对称矩阵满足 A = Aᵀ

np.linalg.inv(A)

矩阵求逆:仅当行列式det(A)≠0时存在

2. 行列式与秩

np.linalg.det(A)

行列式:衡量矩阵"体积",det=0说明线性相关

np.linalg.matrix_rank(A)

矩阵秩:线性无关的行/列数,满秩矩阵可逆

np.linalg.trace(A)

矩阵迹:主对角线元素之和,等于特征值之和

det(AB) = det(A)·det(B)

行列式性质:乘积的行列式等于各自行列式乘积

3. 特征值与特征向量

eigenvalues, eigenvectors = np.linalg.eig(A)

特征值分解:Av = λv,反映矩阵的"主方向"

det(A - λI) = 0

特征方程:求解特征值的特征多项式

Σλᵢ = trace(A), Πλᵢ = det(A)

特征值性质:和等于迹,积等于行列式

应用:PCA降维、稳定性分析

最大特征值决定系统主模态,用于主成分分析

4. 正交分解与SVD

U, S, Vt = np.linalg.svd(A)

SVD分解:A = UΣVᵀ,适用于任意矩阵

奇异值σᵢ = √λᵢ(AᵀA)

奇异值是AᵀA特征值的平方根,衡量信息量

低秩近似:Aₖ = UₖΣₖVₖᵀ

取前k个奇异值,实现数据压缩和去噪

应用:图像压缩、推荐系统

保留主要奇异值,丢弃噪声成分

5. 线性方程组求解

x = np.linalg.solve(A, b)

直接求解 Ax = b,要求A可逆

x = np.linalg.lstsq(A, b)

最小二乘解:适用于超定方程组(方程数>未知数)

解的存在性:rank(A) = rank([A|b])

有解条件:系数矩阵秩等于增广矩阵秩

应用:线性回归、插值拟合

最小二乘法是回归分析的核心

📝 线性代数重要概念详解

核心概念 1:特征值与特征向量的几何意义

定义:对于n阶方阵A,如果存在数λ和非零n维列向量x,使得 Ax = λx,则称λ是矩阵A的特征值,x是A对应于特征值λ的特征向量。

几何解释:

特征向量经过矩阵变换后,方向不变,只发生伸缩。特征值λ就是伸缩的倍数:

  • λ > 1:沿特征向量方向拉伸
  • 0 < λ < 1:沿特征向量方向压缩
  • λ < 0:沿特征向量方向反向
  • λ = 0:该方向被压缩到原点(矩阵不可逆)

举例说明:

考虑矩阵 A = [[2, 0], [0, 3]]

这是一个伸缩变换矩阵:

• x轴方向(向量[1,0])被拉伸2倍 → 特征值λ₁=2

• y轴方向(向量[0,1])被拉伸3倍 → 特征值λ₂=3

单位圆经过变换后变成椭圆,长轴沿y方向(因为3>2)

在建模中的应用:

  • 主成分分析(PCA):协方差矩阵的最大特征值对应的特征向量就是数据方差最大的方向(第一主成分)
  • 马尔可夫链稳态:转移矩阵的最大特征值λ=1对应的特征向量就是系统的稳态分布
  • 系统稳定性分析:所有特征值的实部都<0时,系统稳定
  • AHP层次分析法:判断矩阵的最大特征值用于计算权重和一致性检验

计算方法(Python):

import numpy as np

# 创建矩阵
A = np.array([[4, 1],
              [2, 3]])

# 特征值分解
eigenvalues, eigenvectors = np.linalg.eig(A)

print("特征值:", eigenvalues)
# 输出: [5. 2.]

print("特征向量(每列是一个特征向量):")
print(eigenvectors)
# 第一列是对应λ=5的特征向量
# 第二列是对应λ=2的特征向量

# 验证: Av = λv
v1 = eigenvectors[:, 0]  # 第一个特征向量
print("Av =", A @ v1)
print("λv =", eigenvalues[0] * v1)
# 两者应该相等!

核心概念 2:SVD奇异值分解及其应用

定义:任意m×n矩阵A都可以分解为:A = UΣVᵀ

  • U是m×m正交矩阵(UᵀU = I)
  • Σ是m×n对角矩阵,对角线元素σ₁≥σ₂≥...≥0称为奇异值
  • V是n×n正交矩阵

直观理解:

SVD告诉我们任何矩阵变换都可以分解为三步:

  1. 旋转/反射(Vᵀ变换)
  2. 伸缩(Σ变换,沿坐标轴方向)
  3. 旋转/反射(U变换)

奇异值的意义:

  • 奇异值σᵢ = √λᵢ(AᵀA),即AᵀA的特征值的平方根
  • 奇异值越大,说明该方向包含的信息越多
  • 小奇异值通常对应噪声成分

低秩近似(数据压缩):

保留前k个最大的奇异值及其对应的奇异向量,可以得到原矩阵的最优秩k近似:

Aₖ = σ₁u₁v₁ᵀ + σ₂u₂v₂ᵀ + ... + σₖuₖvₖᵀ

当k远小于原矩阵秩时,可以用很少的空间近似原矩阵,实现数据压缩去噪

在建模中的应用:

  • 数据降维:保留前k个主成分,减少变量个数
  • 图像压缩:用少量奇异值近似图像矩阵
  • 推荐系统:用户-物品矩阵的SVD用于预测缺失评分
  • 自然语言处理:LSA潜在语义分析用SVD提取词义

Python实现:

import numpy as np
import matplotlib.pyplot as plt

# 创建示例矩阵(可以想象成一张灰度图像)
np.random.seed(42)
A = np.random.randn(100, 80)

# SVD分解
U, S, Vt = np.linalg.svd(A, full_matrices=False)

print("原始矩阵形状:", A.shape)
print("奇异值个数:", len(S))
print("前5个奇异值:", S[:5])

# 低秩近似
def low_rank_approx(A, k):
    U, S, Vt = np.linalg.svd(A, full_matrices=False)
    return U[:, :k] @ np.diag(S[:k]) @ Vt[:k, :]

# 用不同秩近似
for k in [1, 5, 10, 50]:
    A_k = low_rank_approx(A, k)
    error = np.linalg.norm(A - A_k)
    print(f"秩{k}近似: 误差 = {error:.4f}")

# 压缩率
original_size = 100 * 80
compressed_size = 100 * 10 + 10 + 80 * 10  # k=10
print(f"\n压缩率: {compressed_size/original_size*100:.1f}%")

核心概念 3:最小二乘法与线性回归

问题背景:

当方程组Ax=b无解时(超定方程组,方程数>未知数个数),我们想找到"最优近似解"x̂,使得Ax̂尽可能接近b。

最小二乘原理:

最小化残差平方和:min ||Ax - b||²

几何意义:在A的列空间中找到离b最近的点(投影)。

正规方程:

AᵀAx̂ = Aᵀb

如果AᵀA可逆,则最小二乘解为:

x̂ = (AᵀA)⁻¹Aᵀb

推导过程:

  1. 目标函数:f(x) = ||Ax - b||² = (Ax-b)ᵀ(Ax-b)
  2. 展开:f(x) = xᵀAᵀAx - 2xᵀAᵀb + bᵀb
  3. 求梯度:∇f(x) = 2AᵀAx - 2Aᵀb
  4. 令梯度为0:AᵀAx = Aᵀb
  5. 解得:x̂ = (AᵀA)⁻¹Aᵀb

在一元线性回归中的应用:

拟合模型 y = β₀ + β₁x,有n个数据点:

设计矩阵 X = [[1, x₁], [1, x₂], ..., [1, xₙ]]ᵀ
响应向量 y = [y₁, y₂, ..., yₙ]ᵀ

最小二乘估计:β̂ = (XᵀX)⁻¹Xᵀy

Python实现:

import numpy as np
from sklearn.linear_model import LinearRegression

# 生成数据
np.random.seed(42)
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
y = 2 * x + 1 + np.random.normal(0, 1, 10)  # y = 2x + 1 + 噪声

# 方法1:手动计算(正规方程)
X = np.column_stack([np.ones(len(x)), x])  # 添加截距列
beta = np.linalg.inv(X.T @ X) @ X.T @ y
print(f"手动计算: β₀={beta[0]:.3f}, β₁={beta[1]:.3f}")

# 方法2:使用numpy最小二乘
beta_np, residuals, rank, s = np.linalg.lstsq(X, y, rcond=None)
print(f"numpy lstsq: β₀={beta_np[0]:.3f}, β₁={beta_np[1]:.3f}")

# 方法3:使用sklearn
model = LinearRegression()
model.fit(x.reshape(-1, 1), y)
print(f"sklearn: β₀={model.intercept_:.3f}, β₁={model.coef_[0]:.3f}")

# 计算R²(决定系数)
y_pred = model.predict(x.reshape(-1, 1))
ss_res = np.sum((y - y_pred) ** 2)
ss_tot = np.sum((y - np.mean(y)) ** 2)
r_squared = 1 - ss_res / ss_tot
print(f"R² = {r_squared:.4f}")

∫ 微积分核心知识点

微积分研究变化率和累积过程,是优化模型、动力学模型、连续系统建模的数学基础

1. 极限与连续

lim(x→a) f(x) = L

极限定义:x趋近a时f(x)趋近于L

lim(x→∞) (1+1/x)^x = e

重要极限:自然对数的底e≈2.71828

连续:lim(x→a) f(x) = f(a)

函数在a点连续:极限值等于函数值

闭区间连续⇒有界且可达最值

介值定理、最值定理是优化的理论基础

2. 导数与梯度

f'(x) = lim(h→0) [f(x+h)-f(x)]/h

导数定义:瞬时变化率,几何意义是切线斜率

(xⁿ)' = nxⁿ⁻¹, (sin x)' = cos x

基本求导公式:幂函数、三角函数

∇f = (∂f/∂x, ∂f/∂y, ∂f/∂z)

梯度向量:多元函数变化最快的方向

链式法则:(f∘g)' = f'(g(x))·g'(x)

复合函数求导,神经网络反向传播的基础

3. 极值与优化

极值必要条件:f'(x) = 0

驻点是可能的极值点(导数为0)

f''(x) > 0 ⇒ 极小值, f''(x) < 0 ⇒ 极大值

二阶导数判别法:凹凸性判断极值类型

拉格朗日乘数法:L = f + λ·g

约束优化:引入拉格朗日乘子转化为无约束问题

梯度下降:xₙ₊₁ = xₙ - η·∇f(xₙ)

数值优化算法:沿梯度反方向迭代寻找极小值

4. 积分与应用

∫f(x)dx = F(x) + C, F'(x) = f(x)

不定积分:原函数族,C为积分常数

∫[a,b] f(x)dx = F(b) - F(a)

牛顿-莱布尼茨公式:定积分计算

面积/体积/弧长 = ∫f(x)dx

积分应用:计算几何量、期望值、累积量

数值积分:梯形法、辛普森法

当原函数难以求出时用数值方法近似

5. 常微分方程(ODE)

dy/dx = f(x,y)

一阶ODE:描述变量间的变化关系

dy/dt = ky ⇒ y = y₀·e^(kt)

指数增长/衰减模型:人口增长、放射性衰变

dP/dt = rP(1-P/K)

Logistic方程:有上限的增长模型

数值求解:欧拉法、龙格-库塔法

大多数ODE没有解析解,需用数值方法

📝 微积分重要概念详解

核心概念 1:梯度向量与梯度下降算法

梯度的定义:

对于多元函数f(x₁, x₂, ..., xₙ),梯度是一个向量,由各偏导数组成:

∇f = (∂f/∂x₁, ∂f/∂x₂, ..., ∂f/∂xₙ)

梯度的几何意义:

  • 方向:梯度指向函数增长最快的方向
  • 大小:梯度的模表示增长的速率
  • 垂直于等高线:在二维情况下,梯度垂直于等值线(等高面的法向量)

直观例子:

想象你站在一座山上:

  • 梯度方向就是你感觉"最陡的上坡方向"
  • 梯度的大小就是坡度的陡峭程度
  • 如果你想最快下山,应该沿梯度的反方向走

梯度下降算法:

梯度下降是最常用的优化算法,用于寻找函数最小值点:

算法步骤:
1. 初始化起始点 x₀
2. 计算当前位置的梯度 ∇f(xₖ)
3. 沿梯度反方向更新:xₖ₊₁ = xₖ - η·∇f(xₖ)
4. 重复步骤2-3,直到梯度接近0

其中 η 是学习率(步长):
• η 太大:可能震荡或发散
• η 太小:收敛速度慢

在建模中的应用:

  • 线性回归:最小二乘法的梯度下降求解
  • 逻辑回归:最大化似然函数的梯度上升
  • 神经网络:反向传播算法本质是链式法则+梯度下降
  • 非线性优化:各类无约束优化问题的通用解法

Python实现:

import numpy as np

# 目标函数:f(x,y) = x² + 2y² (椭圆抛物面)
def f(x, y):
    return x**2 + 2*y**2

# 梯度:∇f = (2x, 4y)
def gradient(x, y):
    return np.array([2*x, 4*y])

# 梯度下降算法
def gradient_descent(start_x, start_y, learning_rate=0.1, epochs=100):
    x, y = start_x, start_y
    path = [(x, y)]  # 记录路径
    
    for i in range(epochs):
        grad = gradient(x, y)
        x = x - learning_rate * grad[0]
        y = y - learning_rate * grad[1]
        path.append((x, y))
        
        # 检查收敛
        if np.linalg.norm(grad) < 1e-6:
            print(f"第{i+1}次迭代收敛")
            break
    
    return x, y, path

# 运行
start_x, start_y = 3.0, 3.0
opt_x, opt_y, path = gradient_descent(start_x, start_y, 0.1, 50)

print(f"起始点: ({start_x}, {start_y})")
print(f"最优点: ({opt_x:.4f}, {opt_y:.4f})")
print(f"最小值: f({opt_x:.4f}, {opt_y:.4f}) = {f(opt_x, opt_y):.6f}")
print(f"迭代次数: {len(path)-1}")

# 查看前5次迭代
print("\n前5次迭代过程:")
for i, (x, y) in enumerate(path[:5]):
    print(f"  迭代{i}: x={x:.3f}, y={y:.3f}, f(x,y)={f(x,y):.3f}")

核心概念 2:拉格朗日乘数法求解约束优化

问题背景:

在无约束优化中,我们直接找梯度为0的点。但很多实际问题有约束条件,比如资源限制、物理约束等。

拉格朗日乘数法:

求解带等式约束的优化问题:

min f(x),满足 g(x) = 0

核心思想:

引入拉格朗日乘子λ,构造拉格朗日函数:

L(x, λ) = f(x) + λ·g(x)

然后对L求偏导,令所有偏导为0:

∂L/∂x = 0 → ∇f(x) + λ·∇g(x) = 0
∂L/∂λ = 0 → g(x) = 0

几何解释:

  • 在最优解处,目标函数的梯度与约束函数的梯度平行
  • 即 ∇f(x) = -λ·∇g(x)
  • 这意味着:在约束曲面上,无法再通过移动来改善目标函数值

经典例子:

问题:在圆 x² + y² = 1 上找一点,使 f(x,y) = x + 2y 最大

解:

  1. 构造拉格朗日函数:L = x + 2y + λ(x² + y² - 1)
  2. 求偏导:
    • ∂L/∂x = 1 + 2λx = 0
    • ∂L/∂y = 2 + 2λy = 0
    • ∂L/∂λ = x² + y² - 1 = 0
  3. 解得:x = 1/√5, y = 2/√5, λ = -√5/2
  4. 最大值:f = x + 2y = √5 ≈ 2.236

在建模中的应用:

  • 资源分配:在预算约束下最大化收益
  • 经济学:效用最大化(预算约束)
  • 工程设计:在材料限制下优化结构性能
  • 机器学习:SVM的优化问题用拉格朗日对偶求解

Python实现:

from scipy.optimize import minimize
import numpy as np

# 目标函数:f(x,y) = x + 2y
def objective(x):
    return -(x[0] + 2*x[1])  # 负号因为scipy求最小值

# 约束条件:x² + y² = 1
def constraint(x):
    return x[0]**2 + x[1]**2 - 1

# 定义约束
con = {'type': 'eq', 'fun': constraint}

# 初始猜测
x0 = [0.5, 0.5]

# 求解
result = minimize(objective, x0, constraints=con)

print(f"最优解: x={result.x[0]:.4f}, y={result.x[1]:.4f}")
print(f"最大值: f = {result.x[0] + 2*result.x[1]:.4f}")
print(f"理论值: √5 = {np.sqrt(5):.4f}")
print(f"约束满足: x²+y² = {result.x[0]**2 + result.x[1]**2:.6f}")

核心概念 3:常微分方程数值解法

什么是常微分方程(ODE):

包含未知函数及其导数的方程,描述变量间的变化关系。

dy/dt = f(t, y),初始条件 y(t₀) = y₀

为什么需要数值解:

  • 大多数ODE没有解析解(无法用初等函数表示)
  • 即使有解析解,计算也可能非常复杂
  • 数值方法可以用计算机快速近似求解

1. 欧拉方法(最简单):

迭代公式:
yₙ₊₁ = yₙ + h·f(tₙ, yₙ)

其中 h 是步长
• 优点:简单易懂
• 缺点:精度低,需要很小步长
• 误差:O(h)

2. 四阶龙格-库塔法(最常用):

RK4方法用4个斜率的加权平均来提高精度:

k₁ = f(tₙ, yₙ)
k₂ = f(tₙ + h/2, yₙ + h·k₁/2)
k₃ = f(tₙ + h/2, yₙ + h·k₂/2)
k₄ = f(tₙ + h, yₙ + h·k₃)

yₙ₊₁ = yₙ + (h/6)(k₁ + 2k₂ + 2k₃ + k₄)

误差:O(h⁴),精度高

经典ODE模型:

(1) 指数增长模型:

dy/dt = ky,解:y = y₀eᵏᵗ

应用:人口增长、放射性衰变、复利计算

(2) Logistic增长模型:

dP/dt = rP(1 - P/K)

应用:有上限的人口增长、传染病传播、产品推广

(3) Lorenz系统(混沌):

dx/dt = σ(y-x)
dy/dt = x(ρ-z) - y
dz/dt = xy - βz

应用:气象预报、混沌理论、蝴蝶效应

Python实现:

import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt

# === 例1:Logistic增长 ===
def logistic(P, t, r, K):
    return r * P * (1 - P / K)

# 参数
r = 0.5    # 增长率
K = 100    # 环境容纳量
P0 = 5     # 初始种群
t = np.linspace(0, 20, 100)

# 求解
solution = odeint(logistic, P0, t, args=(r, K))

print("Logistic增长模型结果:")
print(f"初始种群: {P0}")
print(f"10时刻种群: {solution[50,0]:.2f}")
print(f"20时刻种群: {solution[-1,0]:.2f} (接近K={K})")

# === 例2:Lorenz混沌系统 ===
def lorenz(state, t, sigma, rho, beta):
    x, y, z = state
    return [sigma*(y-x), x*(rho-z)-y, x*y-beta*z]

# 参数和初始条件
sigma, rho, beta = 10, 28, 8/3
state0 = [0.1, 0, 0]
t = np.linspace(0, 50, 1000)

# 求解
solution = odeint(lorenz, state0, t, args=(sigma, rho, beta))

print("\nLorenz系统(混沌):")
print(f"参数: σ={sigma}, ρ={rho}, β={beta:.2f}")
print(f"最终状态: x={solution[-1,0]:.3f}, y={solution[-1,1]:.3f}, z={solution[-1,2]:.3f}")
print("系统呈现混沌行为:初值敏感性(蝴蝶效应)")

🎲 概率统计核心知识点

概率统计处理不确定性和数据推断,是预测模型、假设检验、风险评估的数学基础

1. 随机变量与分布

P(X=x) = p(x) 或 f(x)

概率质量函数(离散)或概率密度函数(连续)

E[X] = Σx·p(x) 或 ∫x·f(x)dx

期望值(均值):随机变量的"中心位置"

Var(X) = E[(X-μ)²] = E[X²] - μ²

方差:衡量随机变量的离散程度

X~N(μ,σ²): f(x) = (1/σ√2π)·e^(-(x-μ)²/2σ²)

正态分布:最重要的连续分布,中心极限定理保证

2. 常见概率分布

B(n,p): P(X=k) = C(n,k)·pᵏ·(1-p)ⁿ⁻ᵏ

二项分布:n次独立伯努利试验的成功次数

P(λ): P(X=k) = λᵏ·e⁻λ/k!

泊松分布:单位时间内事件发生次数

U(a,b): f(x) = 1/(b-a), x∈[a,b]

均匀分布:区间内等概率,蒙特卡洛模拟基础

χ²(n), t(n), F(n₁,n₂)

抽样分布:卡方、t、F分布用于假设检验

3. 大数定律与中心极限定理

X̄ₙ → μ (n→∞)

大数定律:样本均值依概率收敛于总体均值

X̄ ~ N(μ, σ²/n) (n足够大)

中心极限定理:样本均值近似正态分布

蒙特卡洛方法:用频率估计概率

通过大量随机试验估算积分、概率、期望

应用:风险评估、数值计算

当解析方法困难时,用随机模拟近似

4. 参数估计

X̄ = (1/n)ΣXᵢ 估计 μ

样本均值是总体均值的无偏估计

S² = (1/(n-1))Σ(Xᵢ-X̄)² 估计 σ²

样本方差(除以n-1保证无偏性)

置信区间:X̄ ± z·(σ/√n)

以一定概率包含真值的区间估计

极大似然估计(MLE)

选择使样本出现概率最大的参数值

5. 假设检验

H₀: μ = μ₀ vs H₁: μ ≠ μ₀

原假设vs备择假设:双侧检验

t = (X̄-μ₀)/(S/√n) ~ t(n-1)

t检验统计量:方差未知时检验均值

p-value < α ⇒ 拒绝H₀

p值小于显著性水平时拒绝原假设

应用:A/B测试、模型显著性检验

判断观察到的差异是否统计显著

6. 回归分析

y = β₀ + β₁x + ε

一元线性回归模型:因变量与自变量的线性关系

最小二乘法:min Σ(yᵢ-ŷᵢ)²

使残差平方和最小,估计回归系数

R² = 1 - SS_res/SS_tot

决定系数:回归模型解释的变异比例

多元回归:y = β₀ + β₁x₁ + ... + βₖxₖ + ε

多个自变量的线性模型,矩阵形式 β = (XᵀX)⁻¹Xᵀy

📝 概率统计重要概念详解

核心概念 1:中心极限定理(CLT)

定理内容:

设X₁, X₂, ..., Xₙ是独立同分布的随机变量,具有有限的期望E[Xᵢ] = μ和方差Var(Xᵢ) = σ²。

当n足够大时,样本均值的标准化变量近似服从标准正态分布:

Z = (X̄ - μ) / (σ/√n) ~ N(0, 1)

直观理解:

  • 无论原始数据服从什么分布,只要样本量足够大,样本均值的分布就会趋近正态分布
  • 这就是为什么正态分布在自然界如此普遍的原因
  • "足够大"通常指n ≥ 30

例子说明:

假设掷骰子服从均匀分布U(1,6):

  • 掷1次:均匀分布,每个面概率1/6
  • 掷30次取平均:近似正态分布N(3.5, σ²/30)
  • 掷1000次取平均:更接近正态分布,方差更小

结论:单个骰子是均匀分布,但大量骰子的平均值是正态分布!

在建模中的应用:

  • 置信区间:样本均值的分布近似正态,可以构造总体均值的置信区间
  • 假设检验:检验统计量在大样本下服从正态分布或t分布
  • 蒙特卡洛模拟:多次模拟结果的平均值服从正态分布
  • 误差分析:测量误差通常是多个独立因素的和,近似正态分布

Python验证:

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

# 均匀分布(掷骰子)
np.random.seed(42)
n_samples = 10000  # 实验次数
n_dice = 30        # 每次掷30个骰子

# 生成数据
dice_rolls = np.random.randint(1, 7, size=(n_samples, n_dice))
sample_means = np.mean(dice_rolls, axis=1)

# 理论值
mu = 3.5  # E[X] = (1+2+3+4+5+6)/6 = 3.5
sigma = np.sqrt(35/12) / np.sqrt(n_dice)  # σ/√n

print("中心极限定理验证:")
print(f"骰子原始分布: 均匀分布U(1,6)")
print(f"理论均值: {mu}")
print(f"样本均值的均值: {np.mean(sample_means):.4f}")
print(f"理论标准差: {sigma:.4f}")
print(f"样本均值的标准差: {np.std(sample_means):.4f}")

# 正态性检验
stat, p_value = stats.normaltest(sample_means)
print(f"\n正态性检验 p值: {p_value:.6f}")
print(f"结论: {'服从正态分布' if p_value > 0.05 else '不服从正态分布'}")

# 3σ原则验证
within_1sigma = np.sum(np.abs(sample_means - mu) < sigma) / n_samples
within_2sigma = np.sum(np.abs(sample_means - mu) < 2*sigma) / n_samples
within_3sigma = np.sum(np.abs(sample_means - mu) < 3*sigma) / n_samples

print(f"\n3σ原则验证:")
print(f"在μ±σ内: {within_1sigma:.2%} (理论: 68.27%)")
print(f"在μ±2σ内: {within_2sigma:.2%} (理论: 95.45%)")
print(f"在μ±3σ内: {within_3sigma:.2%} (理论: 99.73%)")

核心概念 2:假设检验与p值

假设检验的基本思想:

先假设某个命题成立(原假设H₀),然后看样本数据是否支持这个假设。如果样本与原假设偏离太大,就拒绝原假设。

假设检验的步骤:

1. 建立假设:
   原假设 H₀:μ = μ₀(通常是无效果、无差异)
   备择假设 H₁:μ ≠ μ₀(双侧检验)
            或 μ > μ₀ / μ < μ₀(单侧检验)

2. 选择检验统计量:
   • 方差已知或大样本:Z统计量
   • 方差未知且小样本:t统计量

3. 计算p值:
   p值 = 在H₀成立的前提下,观察到当前或更极端结果的概率

4. 做出决策:
   • p < α(通常α=0.05)→ 拒绝H₀
   • p ≥ α → 不拒绝H₀

p值的理解(重要!):

p值不是"原假设为真的概率"!

p值正确的理解:

  • "如果原假设成立,观察到当前样本(或更极端样本)的概率"
  • p值小 → 当前样本与原假设不符 → 拒绝原假设
  • p值大 → 当前样本与原假设一致 → 不拒绝原假设

两类错误:

不拒绝H₀ 拒绝H₀
H₀为真 ✓ 正确 Ⅰ类错误(概率α)
H₀为假 Ⅱ类错误(概率β) ✓ 正确

常用检验方法:

  • t检验:比较两组均值是否有显著差异
  • 卡方检验:检验分类变量是否独立
  • 方差分析(ANOVA):比较三组及以上均值
  • F检验:比较两个方差是否相等,或回归模型整体显著性

Python实现:

import numpy as np
from scipy import stats

# === 例1:单样本t检验 ===
# 问题:某药是否有效?(血压均值是否不等于120)
np.random.seed(42)
blood_pressure = np.random.normal(118, 12, 50)  # 50个样本

# t检验
t_stat, p_value = stats.ttest_1samp(blood_pressure, 120)

print("=== 单样本t检验 ===")
print(f"样本均值: {blood_pressure.mean():.2f}")
print(f"假设的总体均值: 120")
print(f"t统计量: {t_stat:.4f}")
print(f"p值: {p_value:.4f}")
print(f"结论: {'拒绝H₀,血压不等于120' if p_value < 0.05 else '不拒绝H₀,证据不足以说明血压偏离120'}")

# === 例2:独立样本t检验 ===
# 问题:新药 vs 旧药,效果是否有差异?
control = np.random.normal(100, 15, 50)    # 对照组
treatment = np.random.normal(108, 15, 50)  # 实验组

t_stat2, p_value2 = stats.ttest_ind(control, treatment)

print("\n=== 独立样本t检验 ===")
print(f"对照组均值: {control.mean():.2f}")
print(f"实验组均值: {treatment.mean():.2f}")
print(f"t统计量: {t_stat2:.4f}")
print(f"p值: {p_value2:.6f}")
print(f"结论: {'拒绝H₀,两组有显著差异,新药有效' if p_value2 < 0.05 else '不拒绝H₀,两组无显著差异'}")

# === 例3:卡方检验(分类变量独立性) ===
# 问题:吸烟与肺癌是否相关?
observed = np.array([[60, 40],   # 吸烟: 患癌60, 未患癌40
                     [30, 70]])  # 不吸烟: 患癌30, 未患癌70

chi2, p_value3, dof, expected = stats.chi2_contingency(observed)

print("\n=== 卡方检验 ===")
print(f"卡方统计量: {chi2:.4f}")
print(f"自由度: {dof}")
print(f"p值: {p_value3:.6f}")
print(f"结论: {'拒绝H₀,吸烟与肺癌相关' if p_value3 < 0.05 else '不拒绝H₀,吸烟与肺癌无关'}")

核心概念 3:置信区间与参数估计

点估计 vs 区间估计:

  • 点估计:用一个数值估计总体参数(如样本均值X̄估计μ)
  • 区间估计:用一个区间估计总体参数,附带置信度

置信区间的定义:

95%置信区间的意思是:如果重复抽样100次,构造100个置信区间,大约有95个区间会包含真实的总体参数。

注意:不是"参数有95%概率落在这个区间内"(参数是固定的,不是随机的)

总体均值的置信区间:

方差已知或大样本(Z区间):
   X̄ ± Zα/2 · (σ/√n)

方差未知且小样本(t区间):
   X̄ ± tα/2, n-1 · (S/√n)

其中:
   • Z0.025 = 1.96(95%置信水平)
   • t值取决于样本量(自由度n-1)

影响区间宽度的因素:

  • 样本量n:n越大,区间越窄(估计越精确)
  • 置信水平:99% > 95% > 90%,置信水平越高,区间越宽
  • 数据离散程度:标准差越大,区间越宽

在建模中的应用:

  • 回归系数:回归系数的置信区间,判断变量是否显著(区间不包含0则显著)
  • 预测区间:预测新观测值的可能范围
  • 模型评估:模型性能指标(如R²、准确率)的置信区间
  • 风险评估:VaR(风险价值)的置信区间

Python实现:

import numpy as np
from scipy import stats
from sklearn.linear_model import LinearRegression

# === 例1:总体均值的置信区间 ===
np.random.seed(42)
data = np.random.normal(100, 15, 30)  # 30个样本

x_bar = np.mean(data)
s = np.std(data, ddof=1)  # 样本标准差
n = len(data)

# t临界值 (95%置信水平)
t_critical = stats.t.ppf(0.975, df=n-1)

# 置信区间
margin_of_error = t_critical * s / np.sqrt(n)
ci_lower = x_bar - margin_of_error
ci_upper = x_bar + margin_of_error

print("=== 总体均值的95%置信区间 ===")
print(f"样本均值: {x_bar:.2f}")
print(f"样本标准差: {s:.2f}")
print(f"样本量: {n}")
print(f"t临界值: {t_critical:.4f}")
print(f"误差范围: ±{margin_of_error:.2f}")
print(f"95%置信区间: [{ci_lower:.2f}, {ci_upper:.2f}]")
print(f"区间是否包含真实均值100? {ci_lower < 100 < ci_upper}")

# === 例2:回归系数的置信区间 ===
# 生成数据
X = np.linspace(0, 10, 50).reshape(-1, 1)
y = 2 * X.ravel() + 1 + np.random.normal(0, 2, 50)

# 拟合回归
model = LinearRegression()
model.fit(X, y)

# 计算回归系数的标准误
y_pred = model.predict(X)
residuals = y - y_pred
MSE = np.sum(residuals**2) / (n - 2)
SE_beta1 = np.sqrt(MSE / np.sum((X - np.mean(X))**2))

# 置信区间
t_crit = stats.t.ppf(0.975, df=n-2)
beta1_ci = [model.coef_[0] - t_crit*SE_beta1, 
            model.coef_[0] + t_crit*SE_beta1]

print("\n=== 回归系数的95%置信区间 ===")
print(f"斜率估计: {model.coef_[0]:.3f}")
print(f"95%置信区间: [{beta1_ci[0]:.3f}, {beta1_ci[1]:.3f}]")
print(f"区间是否包含0? {beta1_ci[0] < 0 < beta1_ci[1]}")
print(f"结论: {'斜率不显著' if beta1_ci[0] < 0 < beta1_ci[1] else '斜率显著不为0'}")

🎯 关联的交互式演示

以下交互演示与上述数学知识点直接对应,切换至"Python"标签页即可查看并操作

🔢

矩阵运算与特征值

对应对应线性代数知识点3、4。可视化矩阵、特征值分解、行列式计算

→ 切换至Python标签页 点击"矩阵运算"
📐

线性规划求解

对应微积分知识点3(优化)。可视化可行域、最优解、目标函数等高线

→ 切换至Python标签页 点击"线性规划"

函数优化

对应微积分知识点3(梯度下降)。Rosenbrock函数等高线和优化路径可视化

→ 切换至Python标签页 点击"函数优化"

数值积分

对应微积分知识点4(积分)。辛普森法则计算定积分,可视化积分区域

→ 切换至Python标签页 点击"数值积分"
🔄

微分方程

对应微积分知识点5(ODE)。Lorenz系统、简谐振动、Logistic增长数值解

→ 切换至Python标签页 点击"微分方程"
🎲

概率分布

对应概率统计知识点1、2。生成随机样本,可视化直方图和统计量

→ 切换至Python标签页 点击"概率分布"
📈

回归分析拟合

对应概率统计知识点6(回归)。最小二乘法拟合、R²计算、置信区间

→ 切换至Python标签页 点击"回归分析"
🎯

蒙特卡洛模拟

对应概率统计知识点3(大数定律)。随机采样估算π值,验证概率理论

→ 切换至Python标签页 点击"蒙特卡洛"
🌊

傅里叶变换

对应微积分和线性代数的综合应用。信号频域分析、功率谱计算

→ 切换至Python标签页 点击"傅里叶变换"
📄 线性代数:特征值分解示例
Python
import numpy as np

# 创建对称矩阵(协方差矩阵)
np.random.seed(42)
A = np.random.randn(3, 3)
cov_matrix = A.T @ A  # 对称正定矩阵

print("协方差矩阵:")
print(cov_matrix)

# 特征值分解
eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)

print("\n特征值:")
print(eigenvalues)
print("\n特征向量(每列是一个特征向量):")
print(eigenvectors)

# 验证:Av = λv
print("\n验证 Av = λv:")
for i in range(3):
    v = eigenvectors[:, i]
    λ = eigenvalues[i]
    print(f"λ{i+1} = {λ:.4f}, ||Av - λv|| = {np.linalg.norm(cov_matrix @ v - λ * v):.6f}")

# 主成分分析(PCA)应用
explained_variance_ratio = eigenvalues / np.sum(eigenvalues)
print("\n各主成分解释的方差比例:")
for i, ratio in enumerate(explained_variance_ratio):
    print(f"PC{i+1}: {ratio:.2%}")
📄 微积分:数值积分与微分方程
Python
from scipy.integrate import simpson, odeint
import numpy as np

# === 数值积分 ===
# 计算 ∫[0,π] sin(x)dx = 2
x = np.linspace(0, np.pi, 100)
y = np.sin(x)
integral = simpson(y, x)
print(f"数值积分结果: {integral:.6f}")
print(f"理论值: 2.000000")
print(f"绝对误差: {abs(integral - 2):.6f}")

# === 常微分方程:Lorenz系统 ===
def lorenz(state, t, sigma, rho, beta):
    x, y, z = state
    return [sigma*(y-x), x*(rho-z)-y, x*y-beta*z]

# 参数和初始条件
sigma, rho, beta = 10, 28, 8/3
state0 = [0.1, 0, 0]
t = np.linspace(0, 50, 1000)

# 求解
solution = odeint(lorenz, state0, t, args=(sigma, rho, beta))

print(f"\nLorenz系统最终状态:")
print(f"x = {solution[-1,0]:.3f}")
print(f"y = {solution[-1,1]:.3f}")
print(f"z = {solution[-1,2]:.3f}")
print("系统呈现混沌行为(蝴蝶效应)")
📄 概率统计:假设检验与回归分析
Python
import numpy as np
from scipy import stats
from sklearn.linear_model import LinearRegression

# === 假设检验:t检验 ===
# 问题:新药是否有效?(比较两组均值)
np.random.seed(42)
control_group = np.random.normal(100, 15, 50)  # 对照组
treatment_group = np.random.normal(110, 15, 50)  # 实验组(均值高10)

# 独立样本t检验
t_stat, p_value = stats.ttest_ind(control_group, treatment_group)

print("=== 独立样本t检验 ===")
print(f"对照组均值: {control_group.mean():.2f}")
print(f"实验组均值: {treatment_group.mean():.2f}")
print(f"t统计量: {t_stat:.4f}")
print(f"p值: {p_value:.6f}")
print(f"结论: {'拒绝原假设,两组有显著差异' if p_value < 0.05 else '不拒绝原假设'}")

# === 回归分析 ===
# 生成数据
np.random.seed(42)
X = np.linspace(0, 10, 50).reshape(-1, 1)
y = 2 * X.ravel() + 1 + np.random.normal(0, 2, 50)

# 拟合线性回归
model = LinearRegression()
model.fit(X, y)

print("\n=== 线性回归 ===")
print(f"回归方程: y = {model.coef_[0]:.3f}x + {model.intercept_:.3f}")
print(f"R²分数: {model.score(X, y):.4f}")
print(f"真实参数: 斜率=2.0, 截距=1.0")

📚 数学基础推荐学习资源

《线性代数应该这样学》- Sheldon Axler

直观理解线性代数核心概念,避免过多行列式计算

《托马斯微积分》- George B. Thomas

经典微积分教材,图文并茂,直观理解

《概率论与数理统计》- 茆诗松

国内经典教材,理论严谨,例题丰富

3Blue1Brown: Essence of Linear Algebra

B站视频,用可视化方式理解线性代数本质

Khan Academy: Calculus & Probability

可汗学院免费课程,交互式学习体验

MIT OCW: Single Variable Calculus

MIT公开课,系统学习微积分