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

📐 数学基础教程

系统学习建模竞赛所需的三大数学基础,从基本原理到实际应用

📘 先修课程 🔢 线性代数 ∫ 微积分 🎲 概率统计

📘 第零篇:大学先修课程

建模的语言基础——常见初等函数的图像与性质,以及数列的分析方法,是理解微积分与数学建模的起点

0.1 初等函数与建模应用

数学建模的核心之一是为现实规律选择合适的函数描述。不同函数各有其"擅长刻画的现象"——掌握每类函数的图像形状、关键性质和典型应用场景,是建模选模的基础直觉。

📏 一次函数
f(x) = kx + b
定义域:$\mathbb{R}$,值域:$\mathbb{R}$
k>0 单调递增,k<0 单调递减
b=0 时过原点(正比例函数)
🔵 二次函数
f(x) = ax² + bx + c
开口:a>0 向上,a<0 向下
对称轴:$x = -\frac{b}{2a}$
顶点:$\left(-\frac{b}{2a},\,\frac{4ac-b^2}{4a}\right)$
⚡ 幂函数
f(x) = xⁿ
n 为正整数:过(0,0),(1,1)
n 为负整数:双曲线型,x≠0
n=1/2:$\sqrt{x}$,定义域 [0,+∞)
🚀 指数函数
f(x) = aˣ,a>0,a≠1
定义域:$\mathbb{R}$,值域:$(0,+\infty)$
a>1 递增,0<a<1 递减
过点 (0,1),以 x 轴为渐近线
🌿 对数函数
f(x) = log_a x,a>0,a≠1
定义域:$(0,+\infty)$,值域:$\mathbb{R}$
a>1 递增,0<a<1 递减
过点 (1,0),以 y 轴为渐近线
🌊 三角函数
sin x,cos x,tan x
sin/cos 值域 [−1,1],周期 2π
tan 值域 $\mathbb{R}$,周期 π
$\sin^2 x+\cos^2 x = 1$(恒等)
✔️ 对勾函数
f(x) = x + a/x,a>0
定义域:$x\neq 0$,图像形如"√"
$x>0$ 时最小值 $2\sqrt{a}$($x=\sqrt{a}$ 时)
均值不等式:$x+\frac{a}{x}\geq 2\sqrt{a}$
📐 反三角函数
arcsin x,arccos x,arctan x
arcsin:定义域 $[-1,1]$,值域 $[-\frac{\pi}{2},\frac{\pi}{2}]$
arccos:定义域 $[-1,1]$,值域 $[0,\pi]$
arctan:定义域 $\mathbb{R}$,值域 $(-\frac{\pi}{2},\frac{\pi}{2})$
📈 Logistic函数
f(x) = L/(1+e^{−k(x−x₀)})
S型增长曲线,值域 $(0, L)$
拐点在 $x=x_0$,增速最大
应用:种群增长、逻辑回归

A. 一次函数 $f(x)=kx+b$

性质 斜率·截距·线性关系

斜率 $k = \dfrac{\Delta y}{\Delta x}$ 代表单位自变量变化引起的因变量变化。$k>0$ 递增,$k<0$ 递减,$k=0$ 常值。

$$y = kx+b \;\Longleftrightarrow\; \Delta y = k\cdot\Delta x \quad\text{(等比例变化)}$$

两条不平行直线 $y_1=k_1x+b_1,\;y_2=k_2x+b_2$ 的交点满足 $k_1x+b_1=k_2x+b_2$,解得均衡点。

建模应用 一次函数的五类场景
场景模型形式建模要点
线性回归 $\hat{y}=\beta_0+\beta_1 x$ 最小二乘估计斜率截距;$R^2$ 检验拟合优度;残差图检验线性假设
供需均衡 $Q_d=a-bp$,$Q_s=c+dp$ 均衡价格 $p^*=(a-c)/(b+d)$;价格弹性 $E=-b\cdot p/Q$
成本收益 $C=c_0+c_1 q$,$R=pq$ 盈亏平衡 $q^*=c_0/(p-c_1)$;固定成本 $c_0$,边际成本 $c_1$
线性规划约束 $a_1x_1+a_2x_2\leq b$ 每个约束是半平面;目标函数等值线族平行直线;最优解在顶点
泰勒一阶近似 $f(x)\approx f(x_0)+f'(x_0)(x-x_0)$ 将复杂非线性函数在工作点附近线性化,简化分析

B. 二次函数 $f(x)=ax^2+bx+c$

性质 顶点·对称轴·判别式

配方得顶点式:$f(x)=a\!\left(x+\dfrac{b}{2a}\right)^{\!2}+\dfrac{4ac-b^2}{4a}$

$$\text{对称轴:}x^*=-\frac{b}{2a} \qquad \text{零点:}x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}$$

$\Delta=b^2-4ac>0$:两实根(曲线与 $x$ 轴两交点);$\Delta=0$:重根(切点);$\Delta<0$:无实根。

建模应用 二次函数的五类场景
场景模型形式建模要点
最优定价 $\pi(p)=(p-c)(a-bp)$ 展开为 $-bp^2+(a+bc)p-ac$,顶点处利润最大:$p^*=(a+bc)/(2b)$
抛体轨迹 $y=x\tan\theta-\dfrac{g}{2v_0^2\cos^2\theta}x^2$ 水平射程 $R=v_0^2\sin 2\theta/g$,$\theta=45°$ 时最大
面积最优化 $A=x(L-2x)$ 用固定周长围最大面积:$x^*=L/4$,$A_{\max}=L^2/8$
二次规划(QP) $\min\;\mathbf{x}^\mathsf{T}Q\mathbf{x}+\mathbf{c}^\mathsf{T}\mathbf{x}$ 凸二次目标+线性约束;SVM核心优化形式;组合投资方差最小化
多项式拟合 $\hat{y}=\beta_0+\beta_1x+\beta_2x^2$ 比线性回归多捕捉"先升后降"或"先降后升"的非线性趋势

C. 幂函数 $f(x)=x^\alpha$

性质 按指数 $\alpha$ 分类
指数类型典型例子图像特征
正整数 $\alpha=n$$x^2,x^3$偶次:抛物线型,偶函数;奇次:过原点,奇函数
负整数 $\alpha=-n$$1/x,1/x^2$双曲线型,$x=0$ 为渐近线;$1/x$ 是奇函数
正分数 $\alpha=1/n$$\sqrt{x},x^{1/3}$$\sqrt{x}$:定义域 $[0,+\infty)$;$x^{1/3}$:全体实数,奇函数
任意实数 $\alpha$$x^{0.8},x^{1.5}$定义域通常为 $(0,+\infty)$;$\alpha>1$ 凸,$0<\alpha<1$ 凹

所有幂函数均过点 $(1,1)$;$\alpha>0$ 时在 $(0,+\infty)$ 单调递增;$\alpha<0$ 时单调递减。

建模应用 幂函数的五类场景
场景模型形式建模要点
幂律分布 $P(X>x)=\left(\dfrac{x_0}{x}\right)^{\!\alpha}$ 收入/财富分配(帕累托定律)、城市规模(Zipf定律)、网页引用次数;双对数坐标下为直线,斜率 $=-\alpha$
面积/体积缩放 $A\propto L^2$,$V\propto L^3$ 几何相似律;生物代谢率 $\propto M^{3/4}$(Kleiber定律);航空器机翼面积缩放
平方反比律 $F=\dfrac{Gm_1m_2}{r^2}$,$I=\dfrac{P}{4\pi r^2}$ 万有引力、电磁力、光照强度均遵循 $r^{-2}$;描述"扩散稀释"现象
幂律回归 $y=ax^b$,两边取对数:$\ln y=\ln a+b\ln x$ 双对数线性化后用线性回归估计 $b$;弹性系数 $b=d\ln y/d\ln x$(弹性=斜率)
规模效益 $C(q)=cq^\alpha$ $\alpha<1$:规模收益递增(生产越多单位成本越低);$\alpha>1$:规模收益递减

D. 指数函数 $f(x)=a^x$($a>0,a\neq1$)

性质 运算法则与特殊值
$$a^0=1,\quad a^{x+y}=a^x\cdot a^y,\quad a^{-x}=\frac{1}{a^x},\quad (a^x)^y=a^{xy}$$

自然底 $e^x$:$e\approx2.71828$,$(e^x)'=e^x$(唯一导数等于自身的函数)。半衰期/倍增时间:$T=\dfrac{\ln 2}{|r|}$,其中 $r$ 为增长率。

建模应用 指数函数的六类场景
场景模型形式参数含义
种群/细菌增长 $N(t)=N_0 e^{rt}$ $r$:内禀增长率(出生率$-$死亡率);$r>0$ 增长,$r<0$ 衰减;Malthus模型
放射性衰变 $N(t)=N_0 e^{-\lambda t}$,$T_{1/2}=\dfrac{\ln2}{\lambda}$ $\lambda$:衰变常数;半衰期 $T_{1/2}$ 不依赖初始量;碳-14定年法核心
复利/贴现 $A=Pe^{rt}$(连续);$A=P(1+r)^n$(离散) 未来价值 $A$,现值 $P=Ae^{-rt}$;NPV分析用指数贴现
牛顿冷却定律 $T(t)=T_{\rm env}+(T_0-T_{\rm env})e^{-kt}$ 物体与环境温差按指数衰减;$k$ 取决于热传导系数;法医鉴定死亡时间
疫情初期增长 $I(t)=I_0 e^{(\beta-\gamma)t}$ $\beta-\gamma>0$ 时指数爆发;$R_0=\beta/\gamma>1$ 是爆发条件
信号衰减 $I=I_0 e^{-\mu x}$(Beer-Lambert) 光/声/辐射穿过介质时强度指数衰减;$\mu$:吸收系数;医学CT原理

E. 对数函数 $f(x)=\log_a x$($a>0,a\neq1$)

性质 运算法则
$$\log_a(mn)=\log_a m+\log_a n,\quad \log_a\frac{m}{n}=\log_a m-\log_a n,\quad \log_a m^n=n\log_a m$$

换底公式:$\log_a b = \dfrac{\ln b}{\ln a}$。建模时统一换成自然对数 $\ln$,便于求导:$(\ln x)'=1/x$。

重要极限:$\lim_{x\to0^+}x\ln x=0$;$\ln(1+x)\approx x$($x$ 很小时)。

建模应用 对数函数的六类场景
场景模型形式建模要点
里氏震级 $M=\log_{10}\dfrac{A}{A_0}$ 震级差1级,能量差 $10^{1.5}\approx32$ 倍;对数刻度压缩了极大范围的量
分贝/声压级 $L=20\log_{10}\dfrac{p}{p_0}$(dB) 对数感知:人耳感受到的响度约正比于声压的对数(韦伯-费希纳定律)
信息熵 $H=-\sum_{i}p_i\log_2 p_i$(bits) 衡量系统不确定性;均匀分布时最大熵;机器学习中交叉熵损失函数的基础
对数效用/边际递减 $U(w)=\ln w$,$\;U'(w)=1/w$ 财富增加同样数额,富人感受到的效用增量更小;风险规避行为解释
对数增长模型 $y=a+b\ln t$ 技术学习曲线(第 $n$ 件产品成本)、广告效果(边际收益递减)、对数拟合
数量级分析 $y=a\cdot x^b\;\Rightarrow\;\ln y=\ln a+b\ln x$ 双对数坐标线性化幂律;斜率 $b$ 即弹性系数($b=\partial\ln y/\partial\ln x$)

F. 三角函数 sin, cos, tan

公式 基本关系与变换
$$\begin{array}{c|cccccc} \theta & 0 & \dfrac{\pi}{6} & \dfrac{\pi}{4} & \dfrac{\pi}{3} & \dfrac{\pi}{2} & \pi \\[6pt] \hline \sin\theta & 0 & \tfrac{1}{2} & \tfrac{\sqrt{2}}{2} & \tfrac{\sqrt{3}}{2} & 1 & 0 \\[4pt] \cos\theta & 1 & \tfrac{\sqrt{3}}{2} & \tfrac{\sqrt{2}}{2} & \tfrac{1}{2} & 0 & -1 \end{array}$$
$$\sin(\alpha\pm\beta)=\sin\alpha\cos\beta\pm\cos\alpha\sin\beta \qquad \cos(\alpha\pm\beta)=\cos\alpha\cos\beta\mp\sin\alpha\sin\beta$$

辅助角公式(合成):$a\sin x+b\cos x=\sqrt{a^2+b^2}\,\sin\!\left(x+\arctan\dfrac{b}{a}\right)$

积化和差:$\sin\alpha\cos\beta=\tfrac{1}{2}[\sin(\alpha+\beta)+\sin(\alpha-\beta)]$(傅里叶分析中频率混合)

建模应用 三角函数的六类场景
场景模型形式建模要点
简谐振动 $x(t)=A\sin(\omega t+\varphi)$ 弹簧-质块、单摆(小角近似)、交流电;$A$=振幅,$\omega=2\pi f$=角频率,$\varphi$=初相
傅里叶分析 $f(t)=\sum_{n}(a_n\cos n\omega t+b_n\sin n\omega t)$ 任意周期信号分解为正弦波叠加;滤波、信号压缩、偏微分方程求解的基础
季节时间序列 $y_t=\text{趋势}+A\sin\!\left(\dfrac{2\pi t}{T}+\varphi\right)+\varepsilon$ 气温/用电量/销售额的年周期或周周期;SARIMA/Prophet中的季节项
三角测量/测距 $\dfrac{a}{\sin A}=\dfrac{b}{\sin B}$(正弦定理) 已知两角一边求三角形;GPS三角定位;雷达测距
力/速度分解 $F_x=F\cos\theta,\;F_y=F\sin\theta$ 斜面问题、风向分解、水流/风速建模;向量分量计算
波动叠加/干涉 $y=y_1+y_2=2A\cos\dfrac{\Delta\phi}{2}\sin(\omega t+\bar\phi)$ 同频两波叠加;合振幅取决于相位差;声学干涉、光学干涉条纹

G. 反三角函数 arcsin, arccos, arctan

定义 三个反三角函数

将三角函数限制定义域使其可逆,得到反三角函数:

函数定义定义域值域单调性
$\arcsin x$ $\arcsin x=y \Leftrightarrow \sin y=x$ $[-1,\,1]$ $\left[-\dfrac{\pi}{2},\dfrac{\pi}{2}\right]$ 单调递增
$\arccos x$ $\arccos x=y \Leftrightarrow \cos y=x$ $[-1,\,1]$ $[0,\,\pi]$ 单调递减
$\arctan x$ $\arctan x=y \Leftrightarrow \tan y=x$ $\mathbb{R}$ $\left(-\dfrac{\pi}{2},\dfrac{\pi}{2}\right)$ 单调递增
恒等关系与导数
$$\arcsin x+\arccos x=\frac{\pi}{2} \qquad \arctan x+\arctan\frac{1}{x}=\frac{\pi}{2}\;(x>0)$$
$$(\arcsin x)'=\frac{1}{\sqrt{1-x^2}} \qquad (\arccos x)'=-\frac{1}{\sqrt{1-x^2}} \qquad (\arctan x)'=\frac{1}{1+x^2}$$

特殊值:$\arcsin(0)=0$;$\arcsin(1)=\pi/2$;$\arccos(0)=\pi/2$;$\arctan(1)=\pi/4$;$\arctan(\pm\infty)=\pm\pi/2$

四象限反正切 atan2:$\text{atan2}(y,x)$ 返回向量 $(x,y)$ 与正 $x$ 轴夹角,取值范围 $(-\pi,\pi]$,是 $\arctan(y/x)$ 的扩展版,正确处理各象限。

建模应用 反三角函数的六类场景
场景模型形式建模要点
方向角/方位角 $\theta=\text{atan2}(y,x)$ 由速度分量或坐标差求运动方向;机器人导航、无人机姿态、GPS航向角;避免 $\arctan(y/x)$ 的象限模糊问题
仰角/俯角测量 $\alpha=\arctan\!\dfrac{h}{d}$ 已知水平距离 $d$ 和高度差 $h$ 求仰角;测高建模(楼高、山峰);雷达探测角
地球大圆距离 $\Delta\sigma=\arccos(\sin\varphi_1\sin\varphi_2+\cos\varphi_1\cos\varphi_2\cos\Delta\lambda)$ 球面三角学;航空最短航线计算;GPS中Haversine公式(避免小角度数值问题)
相位恢复 $\phi=\arctan\!\dfrac{Q}{I}$ 复数信号的相角(IQ解调);信号处理中由实/虚部还原相位;图像傅里叶变换相位
柯西/Logistic分布CDF $F(x)=\dfrac{1}{2}+\dfrac{1}{\pi}\arctan\!\dfrac{x-\mu}{\gamma}$ 柯西分布(重尾)的累积分布函数;Logistic分布CDF用 $\arctan$ 近似;用于金融肥尾建模
反正切积分 $\displaystyle\int_0^\infty\frac{dt}{1+t^2}=\frac{\pi}{2}$,$\;\int_0^1\frac{4}{1+t^2}dt=\pi$ 数值积分估算 $\pi$(莱布尼茨公式);概率密度归一化验证;Monte Carlo $\pi$ 估算原理
Python 中的反三角:np.arcsin(x)np.arccos(x)np.arctan(x)(返回弧度)、np.arctan2(y, x)(四象限版)、np.degrees(theta)(弧度→度)。

H. 对勾函数 $f(x)=x+\dfrac{a}{x}$($a>0$)

性质 均值不等式与极值

在 $x>0$ 时,由均值不等式 $\dfrac{x+a/x}{2}\geq\sqrt{x\cdot(a/x)}=\sqrt{a}$,得:

$$x+\frac{a}{x}\geq 2\sqrt{a} \quad \text{(等号在 }x=\sqrt{a}\text{ 时成立)}$$

图像形如"✓":在 $(0,\sqrt{a})$ 上递减,在 $(\sqrt{a},+\infty)$ 上递增,极小值 $2\sqrt{a}$。在 $x<0$ 侧对称地存在极大值 $-2\sqrt{a}$。

建模应用 对勾函数——"两项和最优"结构

凡是总费用 = $\dfrac{A}{x}+Bx$(一项随 $x$ 减少、另一项随 $x$ 增加),最优解都在两项相等时取得,本质是对勾函数极值。

场景模型形式最优解
经济订货量(EOQ) $TC=\dfrac{D}{Q}\cdot S+\dfrac{Q}{2}\cdot H$ $Q^*=\sqrt{\dfrac{2DS}{H}}$,订货成本=持有成本
最优批次生产 $TC=\dfrac{\lambda}{q}\cdot c_s+\dfrac{q}{2}\cdot c_h$ 年需求 $\lambda$,每批生产 $q$;$q^*=\sqrt{2\lambda c_s/c_h}$
运输+仓储权衡 $TC=\dfrac{V}{x}\cdot f+x\cdot k$ 运输次数越多运费越高,但仓储越少;最优频率 $x^*=\sqrt{Vf/k}$
广告投入权衡 $\pi = R(x)-C_{\rm fixed}-x$($R$ 凹函数) 边际收益=1(广告边际成本),对勾型成本结构中极值点给出最优广告量

I. Logistic 函数(S 型增长曲线)

性质 参数与图像特征
$$f(x)=\frac{L}{1+e^{-k(x-x_0)}} \qquad \text{Sigmoid特例:}\sigma(x)=\frac{1}{1+e^{-x}}$$

$L$=上限;$k$=增长率($k>0$);$x_0$=拐点。拐点处 $f(x_0)=L/2$,增速最大为 $kL/4$。

Sigmoid 导数:$\sigma'(x)=\sigma(x)(1-\sigma(x))$(简洁,神经网络反向传播中常用)。

建模应用 Logistic 函数的六类场景
场景模型形式建模要点
种群 Logistic 增长 $\dfrac{dN}{dt}=rN\!\left(1-\dfrac{N}{K}\right)$,解为 $N(t)=\dfrac{K}{1+Ce^{-rt}}$ $K$=环境容纳量;前期指数增长,后期趋于 $K$;拐点在 $K/2$(捕捞最优点)
逻辑回归(分类) $P(Y=1|x)=\sigma(\mathbf{w}^\mathsf{T}\mathbf{x}+b)$ 将线性分数映射到 $(0,1)$ 概率;最大似然估计参数;二分类建模基础
疫情累计病例 $C(t)\approx\dfrac{C_{\max}}{1+e^{-r(t-t_0)}}$ 指数增长期→线性期→饱和期;拐点对应日新增峰值;SIR模型累计感染解近似S型
新产品市场渗透 $M(t)=\dfrac{p}{1+qe^{-(p+q)t}}$(Bass扩散模型) $p$=创新系数,$q$=模仿系数;预测新技术/产品市场份额随时间的增长曲线
神经网络激活 $a=\sigma(z)$,$\sigma'=a(1-a)$ 将神经元输出映射到 $(0,1)$;梯度消失问题($z$ 很大/小时 $\sigma'\approx0$)是ReLU兴起的原因
剂量-效应关系 $E=\dfrac{E_{\max}\cdot C^n}{EC_{50}^n+C^n}$(Hill方程) 药物浓度 $C$ 与效应 $E$;$EC_{50}$=半数有效浓度;$n$=Hill系数(S曲线陡峭程度)
📊 初等函数图像可视化(含反三角函数)

点击按钮切换函数,观察图像形态、特征点与渐近线

0.2 函数的性质

定义 五大基本性质
性质定义判断/应用
定义域 使函数有意义的 $x$ 的集合 分母≠0;对数真数>0;偶次根式≥0;三角函数无限制
单调性 $x_1<x_2\Rightarrow f(x_1)<f(x_2)$(递增) 导数 $f'(x)>0$ 递增;$f'(x)<0$ 递减;导数为0是极值候选
奇偶性 奇函数:$f(-x)=-f(x)$;偶函数:$f(-x)=f(x)$ 奇函数图像关于原点对称;偶函数关于 $y$ 轴对称
周期性 存在 $T>0$ 使 $f(x+T)=f(x)$ 对所有 $x$ 成立 $\sin x,\cos x$ 周期 $2\pi$;$\tan x$ 周期 $\pi$;$A\sin(\omega x+\phi)$ 周期 $2\pi/|\omega|$
有界性 存在 $M$ 使 $|f(x)|\leq M$ 对定义域内所有 $x$ 成立 $\sin x,\cos x$ 有界 $[-1,1]$;多项式、指数函数无界

单调性的证明(定义法)

方法 用定义证明 $f(x)=x^2$ 在 $[0,+\infty)$ 上单调递增

步骤:设 $0\leq x_1<x_2$,则:

$$f(x_2)-f(x_1)=x_2^2-x_1^2=(x_2-x_1)(x_2+x_1)$$

因为 $x_2-x_1>0$ 且 $x_2+x_1>0$,所以 $f(x_2)-f(x_1)>0$,即 $f(x_2)>f(x_1)$,故 $f(x)=x^2$ 在 $[0,+\infty)$ 上单调递增。$\square$

复合函数与反函数

性质 复合函数单调性

同增异减:$y=f(g(x))$,若 $f$ 和 $g$ 同向单调,则复合函数单调递增;若异向,则单调递减。

例:$y=\ln(x^2+1)$,$x^2+1$ 在 $[0,+\infty)$ 上递增,$\ln$ 递增,故复合函数在 $[0,+\infty)$ 上递增。

反函数:若 $f$ 严格单调,则存在反函数 $f^{-1}$,两者图像关于 $y=x$ 对称。$e^x$ 与 $\ln x$ 互为反函数,$\sin x$(限制定义域)与 $\arcsin x$ 互为反函数。

竞赛常用:换元(令 $t=e^x$,令 $t=\ln x$ 等)可将复杂函数化为简单形式。$\ln(1+x)\approx x$($x\to0$)是微积分中极限与估计的利器。
Python — 函数性质分析
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import minimize_scalar

# 绘制函数及其导数,直观看单调区间
x = np.linspace(-3, 3, 400)

fig, axes = plt.subplots(1, 3, figsize=(14, 4))

# 一次函数
axes[0].plot(x, 2*x - 1, color='#b85c2a', linewidth=2, label='f(x)=2x-1')
axes[0].axhline(0, color='#3d352a', linewidth=0.8)
axes[0].axvline(0, color='#3d352a', linewidth=0.8)
axes[0].set_title('一次函数 (单调)'); axes[0].legend()

# 二次函数:顶点、对称轴
y_quad = x**2 - 2*x - 1
axes[1].plot(x, y_quad, color='#2c5282', linewidth=2, label='f(x)=x²-2x-1')
axes[1].axvline(1, color='gray', linestyle='--', linewidth=1, label='对称轴 x=1')
axes[1].scatter([1], [-2], color='red', zorder=5, label=f'顶点(1,-2)')
axes[1].set_title('二次函数 (先减后增)'); axes[1].legend(fontsize=8)

# Logistic 函数
def logistic(x, L=1, k=1, x0=0):
    return L / (1 + np.exp(-k*(x - x0)))

y_lg = logistic(x)
axes[2].plot(x, y_lg, color='#553c9a', linewidth=2, label='σ(x)=1/(1+e⁻ˣ)')
axes[2].axhline(0.5, color='gray', linestyle='--', linewidth=1, label='y=0.5 (拐点)')
axes[2].axvline(0, color='gray', linestyle=':', linewidth=1)
axes[2].set_title('Logistic 函数 (S型)'); axes[2].legend(fontsize=8)

plt.tight_layout()
plt.savefig('elementary_functions.png', dpi=120)
plt.show()

0.3 数列基础

定义 数列的基本概念

按照一定顺序排列的一列数 $a_1,a_2,a_3,\ldots,a_n,\ldots$ 称为数列,记作 $\{a_n\}$。

  • 通项公式:$a_n=f(n)$,直接由项数计算各项
  • 递推公式:由前若干项推导下一项,如 $a_{n+1}=g(a_n)$
  • 前 $n$ 项和:$S_n=\sum_{k=1}^n a_k$,注意 $a_n=S_n-S_{n-1}$($n\geq2$)

等差数列(Arithmetic Sequence)

公式 等差数列 $a_n=a_1+(n-1)d$

相邻项之差为常数 $d$(公差),即 $a_{n+1}-a_n=d$。

$$a_n = a_1+(n-1)d \qquad S_n = na_1+\frac{n(n-1)}{2}d = \frac{n(a_1+a_n)}{2}$$

中项:$a_m=\dfrac{a_{m-k}+a_{m+k}}{2}$(等差中项关系)。

例:$1,4,7,10,\ldots$,$a_1=1,d=3$,$a_n=3n-2$,$S_{10}=\dfrac{10(1+28)}{2}=145$。

等比数列(Geometric Sequence)

公式 等比数列 $a_n=a_1\cdot q^{n-1}$

相邻项之比为常数 $q$(公比),即 $a_{n+1}/a_n=q$($a_n\neq0$)。

$$a_n = a_1 q^{n-1} \qquad S_n = \begin{cases}\dfrac{a_1(1-q^n)}{1-q} & q\neq1 \\ na_1 & q=1\end{cases}$$

无穷等比级数($|q|<1$):$S_\infty=\dfrac{a_1}{1-q}$,如 $1+\dfrac{1}{2}+\dfrac{1}{4}+\cdots=2$。

例:细菌每小时翻倍,初始100个,第 $n$ 小时有 $100\times 2^{n-1}$ 个。

递推数列

类型 常见递推关系及解法
递推形式变换方法通项结果
$a_{n+1}=qa_n$ 直接是等比数列 $a_n=a_1\cdot q^{n-1}$
$a_{n+1}=a_n+d$ 直接是等差数列 $a_n=a_1+(n-1)d$
$a_{n+1}=pa_n+q$($p\neq1$) 令 $b_n=a_n+\frac{q}{p-1}$,则 $b_{n+1}=pb_n$(等比) $a_n=\left(a_1+\frac{q}{p-1}\right)p^{n-1}-\frac{q}{p-1}$
$a_{n+1}=a_n+f(n)$ 累加法:$a_n=a_1+\sum_{k=1}^{n-1}f(k)$ 取决于 $\sum f(k)$ 的形式
$a_{n+1}=a_n\cdot g(n)$ 累乘法:$a_n=a_1\cdot\prod_{k=1}^{n-1}g(k)$ 取决于 $\prod g(k)$ 的形式
$a_{n+2}=a_{n+1}+a_n$(Fibonacci) 特征方程 $x^2=x+1$,通解为两特征根的线性组合 $a_n=\frac{1}{\sqrt{5}}\!\left[\!\left(\frac{1+\sqrt5}{2}\right)^{\!n}\!-\!\left(\frac{1-\sqrt5}{2}\right)^{\!n}\right]$

常用数列与求和公式

公式 必记求和公式
$$\sum_{k=1}^n 1 = n \qquad \sum_{k=1}^n k = \frac{n(n+1)}{2} \qquad \sum_{k=1}^n k^2 = \frac{n(n+1)(2n+1)}{6} \qquad \sum_{k=1}^n k^3 = \left[\frac{n(n+1)}{2}\right]^2$$
$$\sum_{k=0}^{n-1} q^k = \frac{1-q^n}{1-q}\;(q\neq1) \qquad \sum_{k=1}^n k q^{k-1} = \frac{1-(n+1)q^n+nq^{n+1}}{(1-q)^2}$$

最后一个公式(等差×等比混合型)用错位相减法推导,竞赛中常用。

📊 数列项可视化

点击按钮切换数列,查看各项大小与增长趋势

0.4 数列求和方法

① 公式法

等差/等比数列直接套求和公式。适用于标准等差、等比型,要先判断类型。

② 错位相减法

适合"等差 × 等比"混合型,如 $\sum k\cdot r^k$。令 $S_n=\sum a_n b_n$,写 $qS_n$,两式相减消去 $a_n b_n$ 项。

③ 累加法(望远镜法)

若 $a_n = f(n)-f(n-1)$,则 $S_n=f(n)-f(0)$(大部分中间项抵消)。

④ 累乘法

若递推形式为 $a_{n+1}/a_n=g(n)$,则将各比式相乘:$a_n=a_1\prod g(k)$。

⑤ 裂项法

将通项拆为两项之差(分式数列常用):$\frac{1}{k(k+1)}=\frac{1}{k}-\frac{1}{k+1}$,累加后首尾相消。

⑥ 分组求和法

数列可拆分成多个基本类型,分别求和再相加。如 $a_n=2n+3^n$,分为等差和等比两部分。

例题 错位相减法求 $S_n=\sum_{k=1}^n k\cdot 2^k$
$$S_n = 1\cdot2 + 2\cdot2^2 + 3\cdot2^3 + \cdots + n\cdot2^n$$

令 $2S_n = 1\cdot2^2+2\cdot2^3+3\cdot2^4+\cdots+n\cdot2^{n+1}$,则:

$$S_n - 2S_n = 2+2^2+2^3+\cdots+2^n - n\cdot2^{n+1}$$ $$-S_n = \frac{2(1-2^n)}{1-2} - n\cdot2^{n+1} = 2^{n+1}-2-n\cdot2^{n+1}$$ $$\boxed{S_n = (n-1)\cdot 2^{n+1}+2}$$
例题 裂项法求 $\displaystyle S_n=\sum_{k=1}^n\frac{1}{k(k+2)}$
$$\frac{1}{k(k+2)}=\frac{1}{2}\!\left(\frac{1}{k}-\frac{1}{k+2}\right)$$

累加后绝大部分项相消:

$$S_n = \frac{1}{2}\!\left[\left(1-\frac{1}{3}\right)+\left(\frac{1}{2}-\frac{1}{4}\right)+\cdots\right] = \frac{1}{2}\!\left(1+\frac{1}{2}-\frac{1}{n+1}-\frac{1}{n+2}\right)$$

数列的建模应用

应用 递推建模——离散动力系统

许多实际问题可用差分方程(递推数列)建模:

场景递推关系含义
复利增长$A_{n+1}=(1+r)A_n$$r$:利率;解 $A_n=A_0(1+r)^n$
种群 Malthus$N_{n+1}=\lambda N_n$$\lambda=e^r$:增殖率;指数增长
种群 Logistic$N_{n+1}=\lambda N_n\left(1-\frac{N_n}{K}\right)$$K$:环境容纳量;S型增长
药物浓度$C_{n+1}=(1-k)C_n+D$$k$:消除率;$D$:每次给药量
贷款还款$P_{n+1}=rP_n - M$$r$:月利率因子;$M$:月供
Python — 数列分析与可视化
import numpy as np
import matplotlib.pyplot as plt

n = 20  # 项数

# ① 等差数列  a_n = 2 + 3(n-1)
a1, d = 2, 3
arith = [a1 + (k-1)*d for k in range(1, n+1)]
S_arith = [k*a1 + k*(k-1)//2*d for k in range(1, n+1)]

# ② 等比数列  a_n = 1 * 1.5^(n-1)
b1, q = 1, 1.5
geo = [b1 * q**(k-1) for k in range(1, n+1)]

# ③ Fibonacci 数列
fib = [1, 1]
for k in range(2, n):
    fib.append(fib[-1] + fib[-2])

# ④ 递推 Logistic(种群模型):N_{n+1} = 2.8 * N_n * (1 - N_n)
N = [0.1]
for _ in range(n-1):
    N.append(2.8 * N[-1] * (1 - N[-1]))

fig, axes = plt.subplots(2, 2, figsize=(12, 8))

ns = list(range(1, n+1))
axes[0,0].stem(ns, arith, basefmt=" ", linefmt='#b85c2a', markerfmt='o')
axes[0,0].set_title(f'等差数列 (d={d})  S₂₀={S_arith[-1]}')

axes[0,1].stem(ns, geo, basefmt=" ", linefmt='#2c5282', markerfmt='o')
axes[0,1].set_title(f'等比数列 (q={q})')

axes[1,0].stem(ns, fib, basefmt=" ", linefmt='#1a6e6a', markerfmt='o')
axes[1,0].set_title('Fibonacci 数列')

axes[1,1].plot(ns, N, 'o-', color='#553c9a', linewidth=1.5, markersize=5)
axes[1,1].axhline(1 - 1/2.8, color='gray', linestyle='--', label=f'稳定点 K={(1-1/2.8):.3f}')
axes[1,1].set_title('Logistic 递推种群模型 (λ=2.8)'); axes[1,1].legend()

plt.tight_layout()
plt.savefig('sequences.png', dpi=120)
plt.show()

# 数列通项与求和(符号计算)
from sympy import symbols, summation, simplify, oo, factorial, Sum

n_sym, k = symbols('n k', positive=True, integer=True)

# 等差求和:Σk = n(n+1)/2
print(summation(k, (k, 1, n_sym)))               # n*(n+1)/2

# 等比求和:Σ2^k
print(summation(2**k, (k, 0, n_sym-1)))          # 2**n - 1

# 错位相减结果验证:Σk*2^k
print(simplify(summation(k*2**k, (k, 1, n_sym)))) # (n-1)*2^(n+1)+2
建模竞赛提示:离散模型(递推)与连续模型(微分方程)往往对应——等差 ↔ 线性 ODE,等比 ↔ 指数 ODE,Logistic 递推 ↔ Logistic ODE。掌握两类建模语言,可以灵活选择适合题目的形式。

🔢 第一篇:线性代数

研究向量、矩阵和线性变换,是评价模型、主成分分析、数据降维的数学基础

1.1 向量与向量空间

定义 向量

向量是既有大小又有方向的量,可以用有序数组表示:

$$\vec{v} = \begin{pmatrix} v_1 \\ v_2 \\ \vdots \\ v_n \end{pmatrix} \in \mathbb{R}^n$$

其中 $\mathbb{R}^n$ 表示 $n$ 维实数向量空间。

向量的基本运算

运算 向量加法与数乘

加法:对应分量相加

$$\vec{u} + \vec{v} = \begin{pmatrix} u_1 \\ u_2 \end{pmatrix} + \begin{pmatrix} v_1 \\ v_2 \end{pmatrix} = \begin{pmatrix} u_1+v_1 \\ u_2+v_2 \end{pmatrix}$$

数乘:每个分量乘以标量

$$c \cdot \vec{v} = c \begin{pmatrix} v_1 \\ v_2 \end{pmatrix} = \begin{pmatrix} cv_1 \\ cv_2 \end{pmatrix}$$
运算 点积(内积)

两个向量的点积是一个标量:

$$\vec{u} \cdot \vec{v} = \sum_{i=1}^n u_i v_i = u_1v_1 + u_2v_2 + \cdots + u_nv_n$$

几何意义:

$$\vec{u} \cdot \vec{v} = \|\vec{u}\| \|\vec{v}\| \cos\theta$$

其中 $\theta$ 是两个向量的夹角。当点积为0时,两向量正交(垂直)。

🎯 建模应用:在推荐系统中,用户和物品都可以表示为向量,点积表示用户对物品的偏好程度。在自然语言处理中,词向量的点积表示语义相似度。
📊 交互式向量运算

拖动向量端点改变向量 · 观察加法、点积、投影的几何意义

1.2 矩阵与线性变换

定义 矩阵

矩阵是一个按照长方阵列排列的数的集合:

$$A = \begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{pmatrix} \in \mathbb{R}^{m \times n}$$

矩阵 $A$ 有 $m$ 行 $n$ 列,称为 $m \times n$ 矩阵。

矩阵乘法

运算 矩阵-向量乘法

矩阵 $A$ 乘以向量 $\vec{x}$ 得到新向量 $\vec{b}$:

$$A\vec{x} = \begin{pmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{pmatrix} \begin{pmatrix} x_1 \\ x_2 \end{pmatrix} = \begin{pmatrix} a_{11}x_1 + a_{12}x_2 \\ a_{21}x_1 + a_{22}x_2 \end{pmatrix}$$

几何意义:矩阵乘法表示对向量进行线性变换(旋转、缩放、剪切、投影等)。

运算 矩阵-矩阵乘法

矩阵 $A$($m \times p$)乘以矩阵 $B$($p \times n$):

$$(AB)_{ij} = \sum_{k=1}^p a_{ik}b_{kj}$$
注意:矩阵乘法不满足交换律,即一般情况下 $AB \neq BA$。但满足结合律 $(AB)C = A(BC)$ 和分配律 $A(B+C) = AB + AC$。

特殊矩阵

定义 常用特殊矩阵
  • 单位矩阵 $I$:对角线为1,其余为0,满足 $AI = IA = A$
  • 对角矩阵:只有对角线有非零元素,记作 $\text{diag}(d_1, d_2, \ldots, d_n)$
  • 对称矩阵:满足 $A = A^T$,即 $a_{ij} = a_{ji}$
  • 正交矩阵:满足 $Q^TQ = QQ^T = I$,即 $Q^{-1} = Q^T$
  • 正定矩阵:对任意非零向量 $\vec{x}$,都有 $\vec{x}^T A \vec{x} > 0$

行列式

定义 行列式

方阵 $A$ 的行列式 $\det(A)$ 是一个标量,反映矩阵的"体积缩放因子"。

2×2 矩阵:

$$\det\begin{pmatrix} a & b \\ c & d \end{pmatrix} = ad - bc$$

3×3 矩阵(按第一行展开):

$$\det(A) = a_{11}\begin{vmatrix} a_{22} & a_{23} \\ a_{32} & a_{33} \end{vmatrix} - a_{12}\begin{vmatrix} a_{21} & a_{23} \\ a_{31} & a_{33} \end{vmatrix} + a_{13}\begin{vmatrix} a_{21} & a_{22} \\ a_{31} & a_{32} \end{vmatrix}$$
🎯 行列式的几何意义:$|\det(A)|$ 表示单位立方体经过变换 $A$ 后的体积。$\det(A) = 0$ 说明变换后空间"坍塌"了(维度降低)。
📊 矩阵变换可视化 - 网格变换
当前矩阵: [[1,0],[0,1]] | 行列式: 1 | 几何意义: 恒等变换,单位正方形不变
📊 向量变换交互演示
输入向量 v⃗:
变换结果 Av⃗:
[2, 1]

1.3 特征值与特征向量

定义 特征值与特征向量

设 $A$ 是 $n \times n$ 方阵,如果存在非零向量 $\vec{v}$ 和标量 $\lambda$,使得:

$$A\vec{v} = \lambda\vec{v}$$

则称 $\lambda$ 为矩阵 $A$ 的特征值,$\vec{v}$ 为对应于 $\lambda$ 的特征向量

理解要点:特征向量经过矩阵变换后,方向不变,只发生伸缩。特征值 $\lambda$ 就是伸缩倍数:$\lambda > 1$ 拉伸,$0 < \lambda < 1$ 压缩,$\lambda < 0$ 反向。

求解方法

方法 特征值的计算

步骤1:解特征方程

$$\det(A - \lambda I) = 0$$

步骤2:对每个特征值 $\lambda_i$,解线性方程组

$$(A - \lambda_i I)\vec{v}_i = \vec{0}$$

得到对应的特征向量 $\vec{v}_i$。

例子 2×2矩阵的特征值

考虑矩阵:

$$A = \begin{pmatrix} 4 & 1 \\ 2 & 3 \end{pmatrix}$$

解:

  1. 特征方程:$\det(A-\lambda I) = \begin{vmatrix} 4-\lambda & 1 \\ 2 & 3-\lambda \end{vmatrix} = 0$
  2. 展开:$(4-\lambda)(3-\lambda) - 2 = 0$
  3. 化简:$\lambda^2 - 7\lambda + 10 = 0$
  4. 解得:$\lambda_1 = 5, \quad \lambda_2 = 2$

特征值的性质

定理 特征值的重要性质
  • 特征值之和等于矩阵的迹:$\sum \lambda_i = \text{tr}(A) = \sum a_{ii}$
  • 特征值之积等于行列式:$\prod \lambda_i = \det(A)$
  • 对称矩阵的特征值都是实数
  • 正定矩阵的所有特征值都大于0
  • 不同特征值对应的特征向量线性无关

特征值分解

定理 特征值分解(对角化)

如果 $n \times n$ 矩阵 $A$ 有 $n$ 个线性无关的特征向量,则可以分解为:

$$A = V\Lambda V^{-1}$$

其中:

  • $V = (\vec{v}_1, \vec{v}_2, \ldots, \vec{v}_n)$ 是特征向量组成的矩阵
  • $\Lambda = \text{diag}(\lambda_1, \lambda_2, \ldots, \lambda_n)$ 是特征值对角矩阵
🎯 建模应用 - 主成分分析(PCA):
1. 计算数据的协方差矩阵 $\Sigma$
2. 对 $\Sigma$ 进行特征值分解
3. 最大特征值对应的特征向量就是第一主成分(数据方差最大的方向)
4. 保留前 $k$ 个主成分,实现降维
📊 特征向量与特征值可视化
矩阵 A: [[4,1],[2,3]] | 特征值: λ₁=5, λ₂=2 | 特征向量: v₁=[1,1], v₂=[-1,2]
Python 代码:特征值分解
import numpy as np

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

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

print("矩阵 A:")
print(A)
print("\n特征值:")
print(eigenvalues)  # [5. 2.]
print("\n特征向量(每列是一个特征向量):")
print(eigenvectors)

# 验证: Av = λv
v1 = eigenvectors[:, 0]
print("\n验证 Av = λv:")
print("Av₁ =", A @ v1)
print("λ₁v₁ =", eigenvalues[0] * v1)

# 特征值分解
V = eigenvectors
Lambda = np.diag(eigenvalues)
A_reconstructed = V @ Lambda @ np.linalg.inv(V)
print("\n重构矩阵(应该等于A):")
print(A_reconstructed)
print("误差:", np.linalg.norm(A - A_reconstructed))

1.4 奇异值分解(SVD)

定理 SVD分解

任意 $m \times n$ 矩阵 $A$ 都可以分解为:

$$A = U\Sigma V^T$$

其中:

  • $U$ 是 $m \times m$ 正交矩阵(列向量称为左奇异向量)
  • $\Sigma$ 是 $m \times n$ 对角矩阵,对角线元素 $\sigma_1 \geq \sigma_2 \geq \cdots \geq 0$ 称为奇异值
  • $V$ 是 $n \times n$ 正交矩阵(列向量称为右奇异向量)
奇异值与特征值的关系:奇异值 $\sigma_i = \sqrt{\lambda_i(A^TA)}$,即 $A^TA$ 的特征值的平方根。$U$ 的列是 $AA^T$ 的特征向量,$V$ 的列是 $A^TA$ 的特征向量。

SVD的几何解释

任何矩阵变换 $A\vec{x}$ 都可以分解为三步:

  1. 旋转/反射:$V^T\vec{x}$(在输入空间中旋转)
  2. 伸缩:$\Sigma(V^T\vec{x})$(沿坐标轴方向缩放)
  3. 旋转/反射:$U(\Sigma V^T\vec{x})$(在输出空间中旋转)

低秩近似

定理 Eckart-Young定理

保留前 $k$ 个奇异值,得到矩阵的最优秩 $k$ 近似:

$$A_k = \sum_{i=1}^k \sigma_i \vec{u}_i \vec{v}_i^T = \sigma_1\vec{u}_1\vec{v}_1^T + \sigma_2\vec{u}_2\vec{v}_2^T + \cdots + \sigma_k\vec{u}_k\vec{v}_k^T$$

这是所有秩 $k$ 矩阵中,与 $A$ 最接近的(Frobenius范数意义下)。

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

# 创建示例矩阵
A = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])

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

print("原始矩阵 A:")
print(A)
print("\n奇异值:")
print(S)  # 奇异值从大到小排列

# 低秩近似
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, :]

print("\n秩1近似:")
print(low_rank_approx(A, 1))

print("\n秩2近似:")
print(low_rank_approx(A, 2))

# 压缩率
original_params = A.shape[0] * A.shape[1]
compressed_params = k * (A.shape[0] + A.shape[1] + 1)
print(f"\n原始参数: {original_params}")
print(f"秩2近似参数: {compressed_params}")
print(f"压缩率: {compressed_params/original_params*100:.1f}%")

第二篇:微积分

研究变化率与累积过程,以及函数的级数展开,是优化模型、动力学模型、信号处理的数学基础

2.1 极限与连续

定义 函数极限

设函数 $f(x)$ 在点 $a$ 的某个去心邻域内有定义。如果存在常数 $L$,对于任意给定的正数 $\varepsilon$,总存在正数 $\delta$,使得当 $0 < |x-a| < \delta$ 时,有:

$$|f(x) - L| < \varepsilon$$

则称 $L$ 为 $f(x)$ 当 $x \to a$ 时的极限,记作:

$$\lim_{x \to a} f(x) = L$$
直观理解:极限描述的是当 $x$ "趋近于" $a$ 时,$f(x)$ 的变化趋势。关键不在于 $x=a$ 时函数值是多少,而在于 $x$ 接近 $a$ 时 $f(x)$ 接近什么值。

重要极限

公式 两个重要极限

极限一(三角函数):

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

极限二(自然对数底):

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

或等价形式:

$$\lim_{x \to 0} (1 + x)^{1/x} = e$$

连续性

定义 函数连续

函数 $f(x)$ 在点 $a$ 处连续,如果满足:

  1. $f(a)$ 有定义
  2. $\lim_{x \to a} f(x)$ 存在
  3. $\lim_{x \to a} f(x) = f(a)$
定理 闭区间上连续函数的性质

如果 $f(x)$ 在闭区间 $[a,b]$ 上连续,则:

  • 有界性:$f(x)$ 在 $[a,b]$ 上有界
  • 最值定理:$f(x)$ 在 $[a,b]$ 上必能取到最大值和最小值
  • 介值定理:对任意介于 $f(a)$ 和 $f(b)$ 之间的值 $c$,存在 $\xi \in (a,b)$ 使得 $f(\xi) = c$
📊 极限可视化

2.2 导数与微分

定义 导数

函数 $f(x)$ 在点 $x$ 处的导数定义为:

$$f'(x) = \lim_{h \to 0} \frac{f(x+h) - f(x)}{h}$$

如果该极限存在。导数也称为变化率斜率

几何意义:$f'(x)$ 是曲线 $y=f(x)$ 在点 $(x,f(x))$ 处切线的斜率。导数描述了函数在某一点的瞬时变化率。

基本求导公式

公式 常用导数公式
函数 导数
$f(x) = c$(常数) $f'(x) = 0$
$f(x) = x^n$ $f'(x) = nx^{n-1}$
$f(x) = \sin x$ $f'(x) = \cos x$
$f(x) = \cos x$ $f'(x) = -\sin x$
$f(x) = e^x$ $f'(x) = e^x$
$f(x) = \ln x$ $f'(x) = \frac{1}{x}$

求导法则

法则 四则运算与链式法则

四则运算:

$$(f \pm g)' = f' \pm g'$$ $$(cf)' = cf'$$ $$(fg)' = f'g + fg' \quad \text{(乘积法则)}$$ $$\left(\frac{f}{g}\right)' = \frac{f'g - fg'}{g^2} \quad \text{(商法则)}$$

链式法则(复合函数求导):

$$\frac{d}{dx}f(g(x)) = f'(g(x)) \cdot g'(x)$$

多元函数偏导数

定义 偏导数

对于多元函数 $f(x_1, x_2, \ldots, x_n)$,对 $x_i$ 的偏导数是将其余变量视为常数时的导数:

$$\frac{\partial f}{\partial x_i} = \lim_{h \to 0} \frac{f(x_1,\ldots,x_i+h,\ldots,x_n) - f(x_1,\ldots,x_n)}{h}$$
定义 梯度向量

多元函数 $f(x_1, x_2, \ldots, x_n)$ 的梯度是所有偏导数组成的向量:

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

性质:

  • 梯度指向函数增长最快的方向
  • 梯度的模 $\|\nabla f\|$ 表示增长的速率
  • 梯度垂直于等值面(等高线)
📊 交互式导数与切线

拖动红色切点观察切线变化 · 拖动蓝色割线点理解极限过程

极值与优化

定理 极值的必要条件与充分条件

必要条件(Fermat定理):

如果 $f(x)$ 在 $x_0$ 处可导且取得极值,则 $f'(x_0) = 0$。

充分条件(二阶导数判别法):

  • 如果 $f'(x_0) = 0$ 且 $f''(x_0) > 0$,则 $x_0$ 是极小值点
  • 如果 $f'(x_0) = 0$ 且 $f''(x_0) < 0$,则 $x_0$ 是极大值点
  • 如果 $f'(x_0) = 0$ 且 $f''(x_0) = 0$,无法判断,需进一步分析
Python 代码:梯度下降法求极小值
import numpy as np

# 目标函数:f(x,y) = x² + 2y²
def f(x, y):
    return x**2 + 2*y**2

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

# 梯度下降算法
def gradient_descent(start, lr=0.1, epochs=100):
    x = np.array(start, dtype=float)
    path = [x.copy()]
    
    for i in range(epochs):
        grad = gradient(x[0], x[1])
        x = x - lr * grad
        path.append(x.copy())
        
        if np.linalg.norm(grad) < 1e-6:
            print(f"第{i+1}次迭代收敛")
            break
    
    return x, path

# 运行
start = [3.0, 3.0]
opt, path = gradient_descent(start, 0.1, 50)

print(f"起始点: {start}")
print(f"最优点: ({opt[0]:.4f}, {opt[1]:.4f})")
print(f"最小值: f = {f(opt[0], opt[1]):.6f}")
print(f"迭代次数: {len(path)-1}")

2.3 积分

定义 不定积分(原函数)

如果 $F'(x) = f(x)$,则称 $F(x)$ 是 $f(x)$ 的一个原函数,记作:

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

其中 $C$ 是任意常数。

基本积分公式

公式 常用积分公式
积分 结果
$\int x^n\,dx$ ($n \neq -1$) $\frac{x^{n+1}}{n+1} + C$
$\int \cos x\,dx$ $\sin x + C$
$\int \sin x\,dx$ $-\cos x + C$
$\int e^x\,dx$ $e^x + C$
$\int \frac{1}{x}\,dx$ $\ln|x| + C$
定义 定积分

函数 $f(x)$ 在区间 $[a,b]$ 上的定积分定义为:

$$\int_a^b f(x)\,dx = \lim_{n \to \infty} \sum_{i=1}^n f(\xi_i)\Delta x$$

其中 $\Delta x = \frac{b-a}{n}$,$\xi_i \in [x_{i-1}, x_i]$。

几何意义:定积分表示曲线 $y=f(x)$ 与 $x$ 轴在区间 $[a,b]$ 上所围成的面积($x$ 轴上方为正,下方为负)。

定理 微积分基本定理(Newton-Leibniz公式)

如果 $F(x)$ 是 $f(x)$ 在 $[a,b]$ 上的一个原函数,则:

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

意义:这个定理建立了微分与积分之间的联系,把求定积分转化为求原函数。

积分方法

方法 换元积分法

令 $x = g(t)$,则:

$$\int f(g(t)) \cdot g'(t)\,dt = \int f(x)\,dx$$

例子:

$$\int 2x \cdot e^{x^2}\,dx$$

令 $u = x^2$,则 $du = 2x\,dx$,代入得:

$$\int e^u\,du = e^u + C = e^{x^2} + C$$
方法 分部积分法

由乘积求导法则 $(uv)' = u'v + uv'$ 可得:

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

例子:

$$\int x \cdot e^x\,dx$$

取 $u = x$,$dv = e^x dx$,则 $du = dx$,$v = e^x$:

$$\int x \cdot e^x\,dx = xe^x - \int e^x\,dx = xe^x - e^x + C = e^x(x-1) + C$$

积分的应用

应用 积分在建模中的应用
  • 累积量计算:总量 = $\int_a^b$ 速率$\,dt$
  • 面积与体积:旋转体体积 $V = \pi\int_a^b [f(x)]^2\,dx$
  • 概率计算:$P(a \leq X \leq b) = \int_a^b f(x)\,dx$
  • 期望值:$E[X] = \int_{-\infty}^{\infty} x \cdot f(x)\,dx$
  • 物理量:功 $W = \int \vec{F} \cdot d\vec{r}$,质心,转动惯量等
📊 交互式积分 - 拖动边界看面积变化

拖动绿色/蓝色边界点改变积分区间 · 观察黎曼和如何逼近真实面积

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

# 定义被积函数
def f(x):
    return x**2 * np.sin(x)

# 方法1:SciPy数值积分
result, error = integrate.quad(f, 0, np.pi)
print(f"∫₀^π x²sin(x)dx = {result:.6f}")
print(f"误差估计: {error:.2e}")

# 方法2:梯形法则
x = np.linspace(0, np.pi, 1000)
y = f(x)
trap_result = np.trapz(y, x)
print(f"梯形法则结果: {trap_result:.6f}")

# 方法3:Simpson法则
simp_result = integrate.simps(y, x)
print(f"Simpson法则结果: {simp_result:.6f}")

# 可视化
fig, ax = plt.subplots(figsize=(10, 6))
ax.fill_between(x, y, alpha=0.3, label='积分区域')
ax.plot(x, y, linewidth=2)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('f(x)', fontsize=14)
ax.set_title(f'∫₀^π x²sin(x)dx = {result:.4f}', fontsize=16)
ax.legend()
ax.grid(True, alpha=0.3)
plt.savefig('integral_demo.png', dpi=150)
plt.show()

2.4 微分方程

定义 常微分方程(ODE)

包含未知函数及其导数的方程称为微分方程

$$F(x, y, y', y'', \ldots, y^{(n)}) = 0$$

其中 $y = y(x)$ 是未知函数,$y', y'', \ldots$ 是各阶导数。

阶数:方程中出现的最高阶导数的阶数。

:使方程成立的函数 $y(x)$。

一阶常微分方程

类型 可分离变量方程

形如:

$$\frac{dy}{dx} = g(x)h(y)$$

解法:分离变量后积分

$$\int \frac{1}{h(y)}\,dy = \int g(x)\,dx$$

例子 - Malthus人口模型:

$$\frac{dP}{dt} = rP \quad \Rightarrow \quad \int \frac{1}{P}\,dP = \int r\,dt$$

解得:

$$P(t) = P_0 e^{rt}$$
类型 一阶线性方程

形如:

$$\frac{dy}{dx} + P(x)y = Q(x)$$

解法:使用积分因子 $\mu(x) = e^{\int P(x)\,dx}$

$$y = \frac{1}{\mu(x)}\int \mu(x)Q(x)\,dx + \frac{C}{\mu(x)}$$

高阶线性方程

定理 二阶常系数线性齐次方程

方程:

$$ay'' + by' + cy = 0$$

解法:设 $y = e^{rx}$,代入得特征方程:

$$ar^2 + br + c = 0$$

根据特征根的情况:

  • 两个不等实根 $r_1 \neq r_2$:$y = C_1 e^{r_1 x} + C_2 e^{r_2 x}$
  • 重根 $r_1 = r_2 = r$:$y = (C_1 + C_2 x)e^{rx}$
  • 共轭复根 $r = \alpha \pm i\beta$:$y = e^{\alpha x}(C_1\cos\beta x + C_2\sin\beta x)$

数值解法

方法 Euler方法

对于初值问题 $\frac{dy}{dt} = f(t,y)$,$y(t_0) = y_0$:

$$y_{n+1} = y_n + h \cdot f(t_n, y_n)$$

其中 $h$ 是步长。Euler方法是一阶方法,局部截断误差为 $O(h^2)$。

方法 四阶Runge-Kutta方法(RK4)

更精确的数值方法:

$$y_{n+1} = y_n + \frac{h}{6}(k_1 + 2k_2 + 2k_3 + k_4)$$

其中:

$$k_1 = f(t_n, y_n)$$ $$k_2 = f(t_n+\frac{h}{2}, y_n+\frac{h}{2}k_1)$$ $$k_3 = f(t_n+\frac{h}{2}, y_n+\frac{h}{2}k_2)$$ $$k_4 = f(t_n+h, y_n+hk_3)$$

RK4是四阶方法,局部截断误差为 $O(h^5)$,精度远高于Euler方法。

🎯 建模应用 - Lorenz混沌系统:
Lorenz方程描述大气对流,是最早发现的混沌系统之一:
$$\frac{dx}{dt} = \sigma(y-x)$$ $$\frac{dy}{dt} = x(\rho-z) - y$$ $$\frac{dz}{dt} = xy - \beta z$$
当参数 $\sigma=10, \rho=28, \beta=8/3$ 时,系统呈现混沌行为——"蝴蝶效应"。

更多常见微分方程模型

模型 Logistic人口模型(自限增长)

考虑资源限制,人口增长满足:

$$\frac{dP}{dt} = rP\left(1 - \frac{P}{K}\right)$$

其中 $r$ 是增长率,$K$ 是环境承载能力。

解:

$$P(t) = \frac{K}{1 + \left(\frac{K-P_0}{P_0}\right)e^{-rt}}$$

特点:S形曲线,初期指数增长,后期趋于饱和。

模型 弹簧-质量系统(简谐振动)

牛顿第二定律 + 胡克定律:

$$m\frac{d^2x}{dt^2} + c\frac{dx}{dt} + kx = 0$$

其中 $m$ 是质量,$c$ 是阻尼系数,$k$ 是弹簧刚度。

特征方程:$mr^2 + cr + k = 0$

  • 欠阻尼($c^2 < 4mk$):振荡衰减,$x(t) = Ae^{-\alpha t}\cos(\omega t + \phi)$
  • 临界阻尼($c^2 = 4mk$):最快回到平衡位置,不振荡
  • 过阻尼($c^2 > 4mk$):缓慢回到平衡位置
模型 SIR传染病模型

将人群分为三类:

  • S(t):易感者(Susceptible)
  • I(t):感染者(Infected)
  • R(t):移除者(Recovered/Removed)
$$\frac{dS}{dt} = -\beta SI$$ $$\frac{dI}{dt} = \beta SI - \gamma I$$ $$\frac{dR}{dt} = \gamma I$$

其中 $\beta$ 是传染率,$\gamma$ 是恢复率。基本再生数 $R_0 = \beta/\gamma$。

📊 微分方程数值解比较
Python 代码:求解微分方程
import numpy as np
from scipy.integrate import solve_ivp, odeint
import matplotlib.pyplot as plt

# 示例1:人口增长模型 dP/dt = rP
def population_model(t, P, r=0.02):
    return r * P

# 求解
t_span = (0, 100)
t_eval = np.linspace(0, 100, 200)
P0 = [100]  # 初始人口

sol = solve_ivp(population_model, t_span, P0, t_eval=t_eval)

# 解析解对比
P_analytical = 100 * np.exp(0.02 * t_eval)

plt.figure(figsize=(10, 6))
plt.plot(t_eval, sol.y[0], 'b-', linewidth=2, label='数值解')
plt.plot(t_eval, P_analytical, 'r--', linewidth=2, label='解析解')
plt.xlabel('时间 t', fontsize=12)
plt.ylabel('人口 P(t)', fontsize=12)
plt.title('Malthus人口模型', fontsize=14)
plt.legend()
plt.grid(True, alpha=0.3)
plt.savefig('population_model.png', dpi=150)
plt.show()

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

# 求解(两个非常接近的初始条件)
t_span = (0, 50)
t_eval = np.linspace(0, 50, 5000)
y0_1 = [1.0, 1.0, 1.0]
y0_2 = [1.0001, 1.0, 1.0]  # 微小差异

sol1 = solve_ivp(lorenz, t_span, y0_1, t_eval=t_eval)
sol2 = solve_ivp(lorenz, t_span, y0_2, t_eval=t_eval)

# 绘制混沌吸引子和蝴蝶效应
fig = plt.figure(figsize=(14, 6))

ax1 = fig.add_subplot(121, projection='3d')
ax1.plot(sol1.y[0], sol1.y[1], sol1.y[2], 'b-', linewidth=0.5)
ax1.set_title('Lorenz吸引子', fontsize=14)
ax1.set_xlabel('x', fontsize=10)
ax1.set_ylabel('y', fontsize=10)
ax1.set_zlabel('z', fontsize=10)

ax2 = fig.add_subplot(122)
ax2.plot(t_eval, sol1.y[0], 'b-', linewidth=1, label='初始 x₀=1.0')
ax2.plot(t_eval, sol2.y[0], 'r--', linewidth=1, label='初始 x₀=1.0001')
ax2.set_title('蝴蝶效应(敏感依赖于初始条件)', fontsize=14)
ax2.set_xlabel('时间 t', fontsize=12)
ax2.set_ylabel('x(t)', fontsize=12)
ax2.legend()
ax2.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('lorenz_chaos.png', dpi=150)
plt.show()

2.5 泰勒级数展开

定理 泰勒公式

如果函数 $f(x)$ 在点 $a$ 处 $n+1$ 阶可导,则:

$$f(x) = \sum_{k=0}^n \frac{f^{(k)}(a)}{k!}(x-a)^k + R_n(x)$$

其中余项 $R_n(x) = \frac{f^{(n+1)}(\xi)}{(n+1)!}(x-a)^{n+1}$,$\xi$ 在 $a$ 与 $x$ 之间。

常用函数的麦克劳林展开($a = 0$)

公式 常用展开式
函数 泰勒展开 收敛域
$e^x$ $1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \cdots$ $(-\infty, +\infty)$
$\sin x$ $x - \frac{x^3}{3!} + \frac{x^5}{5!} - \cdots$ $(-\infty, +\infty)$
$\cos x$ $1 - \frac{x^2}{2!} + \frac{x^4}{4!} - \cdots$ $(-\infty, +\infty)$
$\ln(1+x)$ $x - \frac{x^2}{2} + \frac{x^3}{3} - \cdots$ $(-1, 1]$
$\frac{1}{1-x}$ $1 + x + x^2 + x^3 + \cdots$ $(-1, 1)$
理解要点:泰勒展开的本质是用多项式"模仿"复杂函数。阶数 $n$ 越高,逼近越精确,但计算量也越大。在 $a$ 附近逼近效果好,远离 $a$ 效果变差。

近似计算与误差分析

例子 用泰勒展开计算 $\sin(0.5)$

取前3项(到 $x^5$):

$$\sin(0.5) \approx 0.5 - \frac{0.5^3}{6} + \frac{0.5^5}{120} = 0.5 - 0.02083 + 0.00026 = 0.47943$$

精确值:$\sin(0.5) = 0.47943\ldots$,误差小于 $10^{-5}$。

🎯 建模应用:非线性方程线性化(在平衡点附近展开)、物理模型简化(小角度近似 $\sin\theta \approx \theta$)、数值算法设计。
📊 泰勒展开近似效果
Python 代码:泰勒展开可视化
import numpy as np
import matplotlib.pyplot as plt

def taylor_sin(x, n):
    """sin(x) 的 n 阶泰勒展开"""
    result = 0
    for k in range(n+1):
        term = ((-1)**k) * x**(2*k+1) / np.math.factorial(2*k+1)
        result += term
    return result

def taylor_exp(x, n):
    """eˣ 的 n 阶泰勒展开"""
    return sum(x**k / np.math.factorial(k) for k in range(n+1))

x = np.linspace(-2*np.pi, 2*np.pi, 500)
plt.figure(figsize=(10, 6))
plt.plot(x, np.sin(x), 'k-', linewidth=2, label='sin(x) 精确值')

for n in [1, 3, 5, 9]:
    y_approx = [taylor_sin(xi, n) for xi in x]
    plt.plot(x, y_approx, '--', linewidth=1.5, label=f'n={n}')

plt.axhline(0, color='gray', linewidth=0.5)
plt.axvline(0, color='gray', linewidth=0.5)
plt.title('sin(x) 的泰勒展开', fontsize=14)
plt.legend()
plt.grid(True, alpha=0.3)
plt.ylim(-3, 3)
plt.savefig('taylor_sin.png', dpi=150)
plt.show()

2.6 傅里叶级数展开

定理 傅里叶级数

如果 $f(x)$ 是周期为 $2\pi$ 的函数,则可以展开为:

$$f(x) = \frac{a_0}{2} + \sum_{n=1}^{\infty} \left(a_n\cos(nx) + b_n\sin(nx)\right)$$

其中系数:

$$a_n = \frac{1}{\pi}\int_{-\pi}^{\pi} f(x)\cos(nx)\,dx, \quad b_n = \frac{1}{\pi}\int_{-\pi}^{\pi} f(x)\sin(nx)\,dx$$

傅里叶级数 vs 泰勒级数

对比 两种展开方法
特性 泰勒级数 傅里叶级数
基函数 $(x-a)^n$(多项式) $\sin(nx), \cos(nx)$
适用函数 光滑函数(局部) 周期函数(全局)
逼近范围 展开点附近 整个周期
主要应用 近似计算、线性化 信号处理、振动分析

函数的奇偶性与傅里叶系数

性质 奇函数与偶函数
  • 偶函数 $f(-x) = f(x)$:只有余弦项($b_n = 0$)
  • 奇函数 $f(-x) = -f(x)$:只有正弦项($a_n = 0$)

例子:方波是奇函数,展开为纯正弦级数。

吉布斯现象

现象 吉布斯(Gibbs)现象

在函数的间断点附近,傅里叶级数的部分和会出现过冲(overshoot),即使项数增加,过冲幅度也不会消失,只会被压缩到更窄的区间。

过冲量:约等于跳跃值的 9%。

🎯 建模应用:信号分解(从混合信号中提取频率成分)、图像压缩(JPEG使用离散余弦变换)、热传导方程求解、振动分析。
📊 傅里叶级数逼近
Python 代码:傅里叶级数展开
import numpy as np
import matplotlib.pyplot as plt

# 方波的傅里叶级数: f(x) = 4/π * Σ sin((2k-1)x)/(2k-1)
def fourier_square(x, n_terms):
    result = 0
    for k in range(1, n_terms+1):
        result += np.sin((2*k-1)*x) / (2*k-1)
    return (4/np.pi) * result

# 锯齿波: f(x) = 2/π * Σ (-1)^(k+1) * sin(kx)/k
def fourier_sawtooth(x, n_terms):
    result = 0
    for k in range(1, n_terms+1):
        result += ((-1)**(k+1)) * np.sin(k*x) / k
    return (2/np.pi) * result

x = np.linspace(-2*np.pi, 2*np.pi, 1000)

plt.figure(figsize=(12, 5))

# 方波
plt.subplot(1, 2, 1)
plt.plot(x, np.sign(np.sin(x)), 'k--', linewidth=1, alpha=0.5, label='理想方波')
for n in [1, 3, 7, 20]:
    plt.plot(x, fourier_square(x, n), linewidth=1.5, label=f'N={n}')
plt.title('方波的傅里叶级数展开', fontsize=14)
plt.legend()
plt.grid(True, alpha=0.3)
plt.ylim(-1.5, 1.5)

# 锯齿波
plt.subplot(1, 2, 2)
target = (2/np.pi) * np.arctan2(np.sin(x), np.cos(x))
plt.plot(x, target, 'k--', linewidth=1, alpha=0.5, label='理想锯齿波')
for n in [1, 3, 7, 20]:
    plt.plot(x, fourier_sawtooth(x, n), linewidth=1.5, label=f'N={n}')
plt.title('锯齿波的傅里叶级数展开', fontsize=14)
plt.legend()
plt.grid(True, alpha=0.3)
plt.ylim(-1.5, 1.5)

plt.tight_layout()
plt.savefig('fourier_series.png', dpi=150)
plt.show()

🎲 第三篇:概率统计

研究随机现象的规律性,是数据分析、统计推断、风险评估的数学基础

3.1 概率基础

定义 概率的公理化定义

设随机试验的样本空间为 $\Omega$,对任意事件 $A \subseteq \Omega$,概率 $P(A)$ 满足:

  1. 非负性:$P(A) \geq 0$
  2. 规范性:$P(\Omega) = 1$
  3. 可列可加性:若 $A_1, A_2, \ldots$ 两两互斥,则 $P(\bigcup_i A_i) = \sum_i P(A_i)$

条件概率与独立性

定义 条件概率

在事件 $B$ 已发生的条件下,事件 $A$ 发生的概率:

$$P(A|B) = \frac{P(A \cap B)}{P(B)} \quad (P(B) > 0)$$
定理 Bayes公式

设 $B_1, B_2, \ldots, B_n$ 是样本空间的一个划分(互斥且完备),则对任意事件 $A$:

$$P(B_i|A) = \frac{P(A|B_i)P(B_i)}{\sum_{j=1}^n P(A|B_j)P(B_j)}$$

各部分含义:

  • $P(B_i)$:先验概率(看到证据前的信念)
  • $P(A|B_i)$:似然(假设成立时观察到证据的概率)
  • $P(B_i|A)$:后验概率(看到证据后的更新信念)
例子 医学检测问题

某疾病发病率0.1%,检测灵敏度99%,假阳性率2%。如果检测结果为阳性,实际患病的概率是多少?

解:

$$P(\text{患病}|\text{阳性}) = \frac{0.99 \times 0.001}{0.99 \times 0.001 + 0.02 \times 0.999} \approx 4.7\%$$

即使检测精度很高,由于疾病本身很罕见,阳性结果中大部分仍是假阳性!这就是"罕见病悖论"。

随机变量

定义 随机变量

随机变量 $X$ 是将样本空间 $\Omega$ 中的每个样本点映射到实数的函数:

$$X: \Omega \to \mathbb{R}$$

分为离散型(取有限或可列个值)和连续型(在区间内可取任意值)。

定义 概率分布函数

离散型 — 概率质量函数(PMF):$P(X = x_k) = p_k$

连续型 — 概率密度函数(PDF)$f(x)$:

$$P(a \leq X \leq b) = \int_a^b f(x)\,dx$$

满足 $f(x) \geq 0$ 且 $\int_{-\infty}^{\infty} f(x)\,dx = 1$。

期望与方差

定义 数学期望(均值)

离散型:

$$E[X] = \sum_k x_k p_k$$

连续型:

$$E[X] = \int_{-\infty}^{\infty} x \cdot f(x)\,dx$$

性质:

  • $E[aX + b] = aE[X] + b$
  • $E[X + Y] = E[X] + E[Y]$(无论是否独立)
  • 若 $X,Y$ 独立:$E[XY] = E[X]E[Y]$
定义 方差与标准差

方差度量随机变量偏离其期望的程度:

$$\text{Var}(X) = E[(X - E[X])^2] = E[X^2] - (E[X])^2$$

标准差:$\sigma_X = \sqrt{\text{Var}(X)}$,与 $X$ 有相同的量纲。

性质:

  • $\text{Var}(aX + b) = a^2\text{Var}(X)$
  • 若 $X,Y$ 独立:$\text{Var}(X+Y) = \text{Var}(X) + \text{Var}(Y)$
🎯 建模应用:贝叶斯定理在建模竞赛中广泛用于参数更新(先验→后验)、疾病筛查模型(假阳性率分析)和垃圾邮件过滤。期望值用于计算加权评分指标,方差则量化预测结果的不确定性。

3.2 常见概率分布

离散分布

分布 二项分布 $B(n,p)$

场景:$n$ 次独立Bernoulli试验中成功的次数,每次成功概率为 $p$。

$$P(X = k) = \binom{n}{k}p^k(1-p)^{n-k}, \quad k = 0,1,\ldots,n$$

期望与方差:

$$E[X] = np, \quad \text{Var}(X) = np(1-p)$$
分布 Poisson分布 $\text{Poi}(\lambda)$

场景:单位时间内某事件发生的次数,如客服电话、放射性衰变。

$$P(X = k) = \frac{\lambda^k e^{-\lambda}}{k!}, \quad k = 0,1,2,\ldots$$
$$E[X] = \lambda, \quad \text{Var}(X) = \lambda$$

与二项分布的关系:当 $n$ 很大、$p$ 很小且 $np = \lambda$ 适中时,$B(n,p) \approx \text{Poi}(\lambda)$。

连续分布

分布 正态(高斯)分布 $N(\mu, \sigma^2)$

最重要的概率分布,概率密度函数:

$$f(x) = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}}$$
$$E[X] = \mu, \quad \text{Var}(X) = \sigma^2$$

标准正态分布:$Z \sim N(0, 1)$,通过标准化:

$$Z = \frac{X - \mu}{\sigma}$$

3σ法则:

  • $P(\mu - \sigma \leq X \leq \mu + \sigma) \approx 68.27\%$
  • $P(\mu - 2\sigma \leq X \leq \mu + 2\sigma) \approx 95.45\%$
  • $P(\mu - 3\sigma \leq X \leq \mu + 3\sigma) \approx 99.73\%$
定理 中心极限定理(CLT)

设 $X_1, X_2, \ldots, X_n$ 是独立同分布的随机变量,$E[X_i] = \mu$,$\text{Var}(X_i) = \sigma^2$,则当 $n$ 充分大时:

$$\bar{X}_n = \frac{1}{n}\sum_{i=1}^n X_i \stackrel{\text{approx}}{\sim} N\left(\mu, \frac{\sigma^2}{n}\right)$$

或等价地:

$$\frac{\bar{X}_n - \mu}{\sigma/\sqrt{n}} \stackrel{d}{\to} N(0, 1) \quad (n \to \infty)$$

意义:无论原始分布是什么,样本均值的分布趋向于正态分布。这是统计推断的基石。

分布 其他重要分布
  • 均匀分布 $U(a,b)$:$f(x) = \frac{1}{b-a}$,$x \in [a,b]$
  • 指数分布 $\text{Exp}(\lambda)$:$f(x) = \lambda e^{-\lambda x}$,$x \geq 0$(等待时间)
  • 卡方分布 $\chi^2(n)$:$n$ 个独立标准正态变量平方和(假设检验)
  • t分布 $t(n)$:小样本均值检验
  • F分布 $F(m,n)$:方差比的检验
📊 概率分布可视化

拖动滑块调节参数,观察正态分布曲线变化

μ=0 σ=1
📊 中心极限定理演示

观察不同分布的样本均值如何趋向正态分布

Python 代码:概率分布可视化
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

# 创建子图
fig, axes = plt.subplots(2, 2, figsize=(12, 10))

# 1. 正态分布(不同参数)
x = np.linspace(-5, 5, 500)
for mu, sigma in [(0, 1), (0, 2), (2, 1)]:
    y = stats.norm.pdf(x, mu, sigma)
    label = f'μ={mu}, σ={sigma}'
    axes[0,0].plot(x, y, linewidth=2, label=label)
axes[0,0].set_title('正态分布', fontsize=14)
axes[0,0].legend()
axes[0,0].grid(True, alpha=0.3)

# 2. 二项分布 vs Poisson近似
n, p = 50, 0.1
k = np.arange(0, 20)
binom_pmf = stats.binom.pmf(k, n, p)
poisson_pmf = stats.poisson.pmf(k, n*p)
axes[0,1].bar(k, binom_pmf, alpha=0.6, label=f'二项 B({n},{p})')
axes[0,1].plot(k, poisson_pmf, 'r-o', linewidth=2, label=f'Poisson(λ={n*p})')
axes[0,1].set_title('二项分布与Poisson近似', fontsize=14)
axes[0,1].legend()
axes[0,1].grid(True, alpha=0.3)

# 3. 中心极限定理演示
sample_means = []
for _ in range(10000):
    samples = np.random.exponential(scale=2, size=100)
    sample_means.append(np.mean(samples))
axes[1,0].hist(sample_means, bins=50, density=True, alpha=0.7, label='样本均值分布')
# 理论正态
x_norm = np.linspace(0, 4, 200)
axes[1,0].plot(x_norm, stats.norm.pdf(x_norm, 2, 2/np.sqrt(100)),
               'r-', linewidth=2, label='理论正态')
axes[1,0].set_title('中心极限定理(指数分布样本均值)', fontsize=14)
axes[1,0].legend()
axes[1,0].grid(True, alpha=0.3)

# 4. 卡方分布
x = np.linspace(0, 30, 500)
for df in [1, 2, 5, 10]:
    axes[1,1].plot(x, stats.chi2.pdf(x, df), linewidth=2, label=f'df={df}')
axes[1,1].set_title('卡方分布', fontsize=14)
axes[1,1].legend()
axes[1,1].grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('probability_distributions.png', dpi=150)
plt.show()
🎯 建模关键:中心极限定理是统计推断的基石——无论原始数据分布如何,只要样本量足够大(通常 $n \geq 30$),样本均值就近似服从正态分布,从而可以使用基于正态分布的检验方法。正态分布的3σ法则常用于建模竞赛中的异常值检测

3.3 参数估计

定义 点估计

用样本统计量 $\hat{\theta}$ 来估计总体参数 $\theta$ 的值。

常用方法:

  • 矩估计:用样本矩估计总体矩(如样本均值估计总体均值)
  • 极大似然估计(MLE):选择使观测数据出现概率最大的参数值
方法 极大似然估计

步骤:

  1. 写出似然函数:$L(\theta) = \prod_{i=1}^n f(x_i;\theta)$
  2. 取对数:$\ell(\theta) = \ln L(\theta) = \sum_{i=1}^n \ln f(x_i;\theta)$
  3. 求导并令为0:$\frac{d\ell}{d\theta} = 0$
  4. 解方程得 $\hat{\theta}_{\text{MLE}}$

例子 - 正态分布的MLE:

$$\hat{\mu}_{\text{MLE}} = \bar{X} = \frac{1}{n}\sum_{i=1}^n X_i$$ $$\hat{\sigma}^2_{\text{MLE}} = \frac{1}{n}\sum_{i=1}^n(X_i - \bar{X})^2$$

区间估计

定义 置信区间

对于给定的置信水平 $1-\alpha$(如95%),参数 $\theta$ 的置信区间 $[\hat{\theta}_L, \hat{\theta}_U]$ 满足:

$$P(\hat{\theta}_L \leq \theta \leq \hat{\theta}_U) = 1 - \alpha$$

正态总体均值的置信区间(方差未知):

$$\bar{X} \pm t_{\alpha/2}(n-1) \cdot \frac{S}{\sqrt{n}}$$

其中 $S$ 是样本标准差,$t_{\alpha/2}(n-1)$ 是自由度为 $n-1$ 的 t 分布的上 $\alpha/2$ 分位数。

正确理解置信区间:95%置信区间的含义是:如果重复抽样100次,每次构建一个置信区间,那么大约有95个区间会包含真实的参数值。不是说参数有95%的概率落在某个特定区间内(参数是固定的,不是随机的)。
Python 代码:参数估计与置信区间
import numpy as np
from scipy import stats

# 示例数据:某批零件的测量值(单位:mm)
np.random.seed(42)
data = np.random.normal(loc=50.0, scale=2.5, size=30)

# ===== 1. 矩估计 =====
mu_hat = np.mean(data)           # 均值估计
sigma_hat = np.std(data, ddof=1) # 标准差估计(无偏)

print("=== 矩估计 ===")
print(f"样本均值(μ的估计): {mu_hat:.4f}")
print(f"样本标准差(σ的估计): {sigma_hat:.4f}")
print(f"样本量: {len(data)}")

# ===== 2. 正态分布均值的置信区间 =====
confidence = 0.95
alpha = 1 - confidence
n = len(data)
se = sigma_hat / np.sqrt(n)  # 标准误差

# t分布临界值
t_critical = stats.t.ppf(1 - alpha/2, df=n-1)
ci_lower = mu_hat - t_critical * se
ci_upper = mu_hat + t_critical * se

print(f"\n=== {confidence*100:.0f}% 置信区间 ===")
print(f"t临界值 t_{{α/2}}(n-1) = t_{{0.025}}({n-1}) = {t_critical:.4f}")
print(f"标准误差 SE = {se:.4f}")
print(f"均值的{confidence*100:.0f}%置信区间: [{ci_lower:.4f}, {ci_upper:.4f}]")

# 验证:使用scipy直接计算
ci = stats.t.interval(confidence, df=n-1, loc=mu_hat, scale=se)
print(f"scipy验证: [{ci[0]:.4f}, {ci[1]:.4f}]")

# ===== 3. 正态分布的MLE参数估计 =====
mu_mle, sigma_mle = stats.norm.fit(data)
print(f"\n=== 极大似然估计(MLE)===")
print(f"μ_MLE = {mu_mle:.4f}(等于样本均值)")
print(f"σ_MLE = {sigma_mle:.4f}(有偏,分母为n而非n-1)")

# ===== 4. 样本量对置信区间宽度的影响 =====
print("\n=== 样本量对置信区间宽度的影响 ===")
for n_size in [10, 30, 100, 1000]:
    sample = np.random.normal(50, 2.5, n_size)
    ci_s = stats.t.interval(0.95, df=n_size-1,
                            loc=np.mean(sample),
                            scale=stats.sem(sample))
    width = ci_s[1] - ci_s[0]
    print(f"n={n_size:4d}: 区间宽度 = {width:.4f}")

3.4 假设检验

定义 假设检验的基本框架

步骤:

  1. 建立假设
    • 原假设 $H_0$(通常为"无效应"或"无差异")
    • 备择假设 $H_1$(研究者想要证明的)
  2. 选择检验统计量:如 $Z$ 统计量、$t$ 统计量、$\chi^2$ 统计量
  3. 确定显著性水平 $\alpha$(常用0.05或0.01)
  4. 计算p值:在 $H_0$ 成立的前提下,观察到当前或更极端结果的概率
  5. 做出决策
    • 如果 $p \leq \alpha$,拒绝 $H_0$(结果"统计显著")
    • 如果 $p > \alpha$,不拒绝 $H_0$(证据不足)
定义 p值

p值是在原假设 $H_0$ 为真的条件下,观察到当前样本或更极端结果的概率。

$$p = P(\text{观察到当前或更极端数据} \mid H_0 \text{为真})$$

p值越小,说明在 $H_0$ 下观察到的数据越"不可思议",越有理由拒绝 $H_0$。

常见检验方法

检验 单样本t检验

目的:检验总体均值是否等于某个指定值 $\mu_0$。

$$H_0: \mu = \mu_0 \quad \text{vs} \quad H_1: \mu \neq \mu_0$$

检验统计量:

$$t = \frac{\bar{X} - \mu_0}{S/\sqrt{n}} \sim t(n-1)$$

决策规则:如果 $|t| > t_{\alpha/2}(n-1)$,则拒绝 $H_0$。

检验 两样本t检验

目的:检验两个总体的均值是否相等。

$$H_0: \mu_1 = \mu_2 \quad \text{vs} \quad H_1: \mu_1 \neq \mu_2$$

检验统计量(方差齐性假定):

$$t = \frac{\bar{X}_1 - \bar{X}_2}{S_p\sqrt{\frac{1}{n_1} + \frac{1}{n_2}}} \sim t(n_1+n_2-2)$$

其中 $S_p$ 是合并标准差。

检验 卡方检验

目的:检验分类变量之间的独立性或拟合优度。

$$\chi^2 = \sum \frac{(O_i - E_i)^2}{E_i} \sim \chi^2(\text{df})$$

其中 $O_i$ 是观测频数,$E_i$ 是期望频数。

⚠️ 两类错误:
第一类错误(弃真):$H_0$ 为真但拒绝了它,概率为 $\alpha$(显著性水平)
第二类错误(取伪):$H_0$ 为假但没拒绝它,概率为 $\beta$
检验功效(Power):$1 - \beta$,即 $H_0$ 为假时正确拒绝的概率
• 在样本量固定时,减小 $\alpha$ 会增大 $\beta$,需要权衡。
📊 假设检验可视化

观察 p 值、拒绝域和检验功效的几何意义

Python 代码:假设检验
import numpy as np
from scipy import stats

# 示例1:单样本t检验
# 问题:某厂生产的零件平均长度是否为10cm?
sample_data = np.array([10.1, 9.8, 10.3, 9.9, 10.0, 10.2, 9.7, 10.1, 9.8, 10.0])

# 执行t检验
t_stat, p_value = stats.ttest_1samp(sample_data, popmean=10.0)

print("=== 单样本t检验 ===")
print(f"样本均值: {np.mean(sample_data):.3f}")
print(f"样本标准差: {np.std(sample_data, ddof=1):.3f}")
print(f"t统计量: {t_stat:.4f}")
print(f"p值: {p_value:.4f}")
if p_value > 0.05:
    print("结论: p > 0.05, 不拒绝H₀, 没有足够证据说明均值不同于10cm")
else:
    print("结论: p ≤ 0.05, 拒绝H₀, 均值显著不同于10cm")

# 示例2:两样本t检验
# 问题:两种教学方法的效果是否有差异?
group_a = np.array([85, 88, 90, 82, 87, 91, 86, 89])
group_b = np.array([78, 80, 85, 76, 82, 79, 83, 81])

t_stat2, p_value2 = stats.ttest_ind(group_a, group_b)

print("\n=== 两样本t检验 ===")
print(f"A组均值: {np.mean(group_a):.2f}")
print(f"B组均值: {np.mean(group_b):.2f}")
print(f"t统计量: {t_stat2:.4f}")
print(f"p值: {p_value2:.4f}")
if p_value2 < 0.05:
    print("结论: p ≤ 0.05, 拒绝H₀, 两种教学方法效果有显著差异")
else:
    print("结论: p > 0.05, 不拒绝H₀")

# 示例3:卡方独立性检验
# 问题:吸烟与患肺癌是否有关?
observed = np.array([[40, 60],   # 吸烟: 患癌40, 未患癌60
                     [10, 90]])  # 不吸烟: 患癌10, 未患癌90

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

print("\n=== 卡方独立性检验 ===")
print(f"卡方统计量: {chi2:.4f}")
print(f"自由度: {dof}")
print(f"p值: {p_chi:.6f}")
print(f"期望频数:\n{expected}")
if p_chi < 0.05:
    print("结论: p ≤ 0.05, 拒绝H₀, 吸烟与患肺癌有关联")
else:
    print("结论: p > 0.05, 不拒绝H₀")

# 示例4:线性回归与相关性检验
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
y = np.array([2.3, 4.1, 6.2, 8.0, 10.1, 11.8, 14.2, 16.0, 17.9, 20.1])

slope, intercept, r_value, p_value_reg, std_err = stats.linregress(x, y)

print("\n=== 线性回归 ===")
print(f"回归方程: y = {slope:.3f}x + {intercept:.3f}")
print(f"相关系数 r = {r_value:.4f}")
print(f"R² = {r_value**2:.4f}")
print(f"p值 = {p_value_reg:.6f}")
if p_value_reg < 0.05:
    print("结论: x与y之间存在显著的线性关系")
建模应用 数学建模竞赛中的统计方法
  • 数据预处理:异常值检测(3σ原则)、缺失值处理、数据标准化
  • 特征选择:相关性分析、方差分析(ANOVA)、卡方检验
  • 模型验证:残差分析、拟合优度检验、交叉验证
  • 结果分析:显著性检验、置信区间、效应量分析
  • 预测模型:线性回归、逻辑回归、时间序列分析

🔗 第六篇:相关分析

研究变量之间的关联程度与方向,是数据分析、特征工程和因果推断的重要工具

6.1 相关系数概述

定义 相关性

相关性描述了两个变量之间线性或单调关系的方向强度

  • 正相关:一个变量增大,另一个也倾向于增大
  • 负相关:一个变量增大,另一个倾向于减小
  • 不相关:两个变量之间没有明显的关联模式
重要提醒:相关 ≠ 因果!两个变量高度相关并不意味着一个导致另一个。可能存在第三个变量(混杂因素)同时影响两者,或者纯属巧合。

三种常用相关系数

对比 三种相关系数的适用场景
相关系数 度量关系 数据要求 取值范围
皮尔逊 (Pearson) 线性关系 连续变量,近似正态分布 [-1, 1]
斯皮尔曼 (Spearman) 单调关系 有序变量,任意分布 [-1, 1]
肯德尔 (Kendall's τ) 单调关系 有序变量,小样本 [-1, 1]
🎯 建模应用:在特征选择阶段,计算各特征与目标变量的相关系数,筛选出相关性强的特征;同时检查特征之间的相关性,剔除高度共线性的特征(|r| > 0.8),避免多重共线性问题。

6.2 皮尔逊相关系数(Pearson)

定义 皮尔逊相关系数

皮尔逊相关系数 $r$ 衡量两个变量之间的线性相关程度

$$r = \frac{\sum_{i=1}^n (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i=1}^n (x_i - \bar{x})^2} \sqrt{\sum_{i=1}^n (y_i - \bar{y})^2}} = \frac{\text{Cov}(X,Y)}{\sigma_X \sigma_Y}$$

其中 $\text{Cov}(X,Y)$ 是 $X$ 和 $Y$ 的协方差,$\sigma_X$ 和 $\sigma_Y$ 分别是 $X$ 和 $Y$ 的标准差。

性质解读

性质 皮尔逊相关系数的重要性质
  • 取值范围:$-1 \leq r \leq 1$
  • $r = 1$:完全正线性相关,所有点恰好在一条斜率为正的直线上
  • $r = -1$:完全负线性相关,所有点恰好在一条斜率为负的直线上
  • $r = 0$:无线性相关(但可能存在非线性关系!)
  • 对称性:$r_{XY} = r_{YX}$
  • 尺度不变性:对 $X$ 或 $Y$ 做线性变换(乘常数加常数),$r$ 不变

相关强度的经验判断

经验 相关系数大小解读
|r| 范围 相关强度 示例
0.8 ~ 1.0 极强相关 身高与体重(同年龄段)
0.6 ~ 0.8 强相关 学习时间与考试成绩
0.4 ~ 0.6 中等相关 温度与冰淇淋销量
0.2 ~ 0.4 弱相关 广告投入与销售额
0.0 ~ 0.2 极弱或无相关 shoe size 与 IQ

假设检验

检验 皮尔逊相关系数的显著性检验

假设:

$$H_0: \rho = 0 \quad \text{(总体相关系数为0,即无线性相关)}$$ $$H_1: \rho \neq 0$$

检验统计量:

$$t = r\sqrt{\frac{n-2}{1-r^2}} \sim t(n-2)$$

决策规则:如果 $|t| > t_{\alpha/2}(n-2)$,则拒绝 $H_0$,认为相关系数显著不为0。

⚠️ 皮尔逊相关系数的局限性:
• 只度量线性关系,对非线性关系不敏感(如 $y = x^2$ 可能 $r \approx 0$)
• 对异常值非常敏感,一个极端值可以大幅改变 $r$ 值
• 要求数据近似正态分布,否则检验结果可能不可靠
• 当数据不满足假定时,应使用斯皮尔曼或肯德尔相关系数
📊 皮尔逊相关系数交互式演示

拖动数据点或点击预设观察相关系数变化

Python 代码:皮尔逊相关系数
import numpy as np
from scipy import stats

# 示例数据:学习时间与考试成绩
study_hours = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
exam_scores = np.array([52, 55, 58, 62, 68, 72, 78, 82, 88, 95])

# 方法1:手动计算
x_mean = np.mean(study_hours)
y_mean = np.mean(exam_scores)
numerator = np.sum((study_hours - x_mean) * (exam_scores - y_mean))
denominator = np.sqrt(np.sum((study_hours - x_mean)**2) * np.sum((exam_scores - y_mean)**2))
r_manual = numerator / denominator
print(f"手动计算 r = {r_manual:.4f}")

# 方法2:使用 numpy
r_numpy = np.corrcoef(study_hours, exam_scores)[0, 1]
print(f"numpy 计算 r = {r_numpy:.4f}")

# 方法3:使用 scipy(同时获得p值)
r_scipy, p_value = stats.pearsonr(study_hours, exam_scores)
print(f"scipy 计算 r = {r_scipy:.4f}, p = {p_value:.6f}")

# 相关强度判断
def interpret_correlation(r):
    abs_r = abs(r)
    if abs_r >= 0.8: return "极强相关"
    elif abs_r >= 0.6: return "强相关"
    elif abs_r >= 0.4: return "中等相关"
    elif abs_r >= 0.2: return "弱相关"
    else: return "极弱或无相关"

print(f"\n相关强度: {interpret_correlation(r_scipy)}")
print(f"R² = {r_scipy**2:.4f}({r_scipy**2*100:.1f}%的方差被解释)")

# 显著性检验
t_stat = r_scipy * np.sqrt((len(study_hours) - 2) / (1 - r_scipy**2))
print(f"t统计量 = {t_stat:.4f}")
print(f"在α=0.05水平下,相关性{'显著' if p_value < 0.05 else '不显著'}")

6.3 斯皮尔曼等级相关系数(Spearman)

定义 斯皮尔曼等级相关系数

斯皮尔曼相关系数 $\rho$(或 $r_s$)是一种非参数相关度量,基于变量的秩次(排序)而非原始值。它度量的是两个变量之间单调关系的强度。

计算公式(无结时):

$$\rho = 1 - \frac{6\sum_{i=1}^n d_i^2}{n(n^2 - 1)}$$

其中 $d_i = \text{rank}(x_i) - \text{rank}(y_i)$ 是第 $i$ 对观测值的秩次差。

一般公式(有结时):对秩次数据计算皮尔逊相关系数即可。

为什么叫"等级"相关?因为计算时先将原始数据替换为其在样本中的排序(第1小、第2小、…),然后计算秩次之间的皮尔逊相关。所以即使原始值是非线性的,只要大小顺序一致,$\rho$ 就不变。

与皮尔逊的比较

对比 Spearman vs Pearson
特性 皮尔逊 $r$ 斯皮尔曼 $\rho$
度量关系 线性关系 单调关系
数据类型 连续变量 连续或有序分类
分布假设 近似正态分布 无分布假设(非参数)
异常值敏感度 敏感 稳健(使用秩次)
计算基础 原始值 秩次(排序)

适用场景

场景 何时使用斯皮尔曼相关系数
  • 数据不满足正态分布:偏态分布或有极端值
  • 存在非线性单调关系:如 $y = e^x$ 或 $y = \sqrt{x}$
  • 有序分类数据:如满意度评分(1-5星)、排名数据
  • 样本量较小:非参数方法在小样本下更稳健
  • 存在异常值:秩次方法天然抗异常值干扰
📊 斯皮尔曼相关系数演示

对比同一数据集上 Pearson 和 Spearman 相关系数的差异

Python 代码:斯皮尔曼相关系数
import numpy as np
from scipy import stats

# 示例1:单调非线性关系
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
y = np.exp(x * 0.3)  # 指数增长

# 皮尔逊 vs 斯皮尔曼
r_pearson, p_pearson = stats.pearsonr(x, y)
r_spearman, p_spearman = stats.spearmanr(x, y)

print("=== 单调非线性关系:y = e^(0.3x) ===")
print(f"Pearson  r = {r_pearson:.4f}, p = {p_pearson:.6f}")
print(f"Spearman ρ = {r_spearman:.4f}, p = {p_spearman:.6f}")
print("→ Spearman = 1.0(完美单调关系),Pearson < 1")

# 示例2:含异常值的数据
np.random.seed(42)
x2 = np.random.randn(100)
y2 = x2 + np.random.randn(100) * 0.5
# 加入异常值
x2[99] = 10
y2[99] = -10

r2_p, p2_p = stats.pearsonr(x2, y2)
r2_s, p2_s = stats.spearmanr(x2, y2)

print("\n=== 含异常值的数据 ===")
print(f"Pearson  r = {r2_p:.4f}, p = {p2_p:.6f}")
print(f"Spearman ρ = {r2_s:.4f}, p = {p2_s:.6f}")
print("→ Spearman 受异常值影响小,更稳健")

# 示例3:手动计算(演示秩次转换)
x3 = [85, 92, 78, 95, 88]
y3 = [80, 90, 75, 92, 85]

rank_x = [sorted(x3).index(v)+1 for v in x3]
rank_y = [sorted(y3).index(v)+1 for v in y3]
d_squared = sum((rx - ry)**2 for rx, ry in zip(rank_x, rank_y))
n = len(x3)
rho_manual = 1 - 6*d_squared / (n*(n**2 - 1))

print("\n=== 手动计算斯皮尔曼 ===")
print(f"秩次X: {rank_x}")
print(f"秩次Y: {rank_y}")
print(f"Σd² = {d_squared}")
print(f"ρ = 1 - 6×{d_squared}/({n}×{n**2-1}) = {rho_manual:.4f}")

6.4 肯德尔等级相关系数(Kendall's τ)

定义 肯德尔 τ 相关系数

肯德尔相关系数基于数据对的一致性来度量两个变量的关联程度。

一致对与不一致对:

  • 对于两对观测 $(x_i, y_i)$ 和 $(x_j, y_j)$($i < j$):
  • 如果 $(x_i - x_j)$ 和 $(y_i - y_j)$ 同号,称为一致对(concordant)
  • 如果 $(x_i - x_j)$ 和 $(y_i - y_j)$ 异号,称为不一致对(discordant)

计算公式(τ-a):

$$\tau = \frac{n_c - n_d}{\frac{1}{2}n(n-1)}$$

其中 $n_c$ 是一致对数,$n_d$ 是不一致对数,$n$ 是样本量。

直观理解:肯德尔 τ 可以理解为:随机抽取两对数据,它们的大小顺序一致的概率减去不一致的概率。τ = 0.6 意味着一致对比不一致对多的概率是 60%。

三种变体

定义 肯德尔 τ 的三种变体
  • τ-a:基本公式,不考虑结(ties)
  • τ-b:校正结的影响,适合有相同值的数据
  • τ-c (τ-c):适合列联表(两个变量类别数不同)

τ-b 公式:

$$\tau_b = \frac{n_c - n_d}{\sqrt{(n_c + n_d + T_X)(n_c + n_d + T_Y)}}$$

其中 $T_X$ 和 $T_Y$ 分别是 $X$ 和 $Y$ 中结的对数。

三种相关系数对比总结

总结 Pearson、Spearman、Kendall 对比
特性 Pearson Spearman Kendall
关系类型 线性 单调 单调
数据要求 连续、正态 有序即可 有序即可
异常值 敏感 稳健 最稳健
计算复杂度 $O(n)$ $O(n \log n)$ $O(n^2)$
统计功效 最高(正态时) 中等 略低于Spearman
推荐场景 线性、正态、大样本 一般单调关系 小样本、有结
📊 三种相关系数综合对比

同一数据集上同时显示 Pearson、Spearman 和 Kendall 相关系数

Python 代码:三种相关系数对比
import numpy as np
from scipy import stats

np.random.seed(42)
n = 100

# 场景1:完美线性
x1 = np.linspace(1, 10, n)
y1 = 2 * x1 + np.random.randn(n) * 0.5

# 场景2:非线性单调(指数)
x2 = np.linspace(0.5, 3, n)
y2 = np.exp(x2)

# 场景3:非单调(二次)
x3 = np.linspace(-3, 3, n)
y3 = x3**2 + np.random.randn(n) * 0.3

# 场景4:含异常值
x4 = np.random.randn(n)
y4 = x4 + np.random.randn(n) * 0.5
x4[-1], y4[-1] = 8, -8  # 异常值

def compare_all(x, y, label):
    rp, pp = stats.pearsonr(x, y)
    rs, ps = stats.spearmanr(x, y)
    rk, pk = stats.kendalltau(x, y)
    print(f"\n=== {label} ===")
    print(f"Pearson:  r = {rp:+.4f} (p={pp:.4f})")
    print(f"Spearman: ρ = {rs:+.4f} (p={ps:.4f})")
    print(f"Kendall:  τ = {rk:+.4f} (p={pk:.4f})")

compare_all(x1, y1, "线性+噪声")
compare_all(x2, y2, "指数关系")
compare_all(x3, y3, "二次关系(非单调)")
compare_all(x4, y4, "含异常值")
🎯 建模中的选择建议:
默认选 Spearman:适用于大多数场景,对异常值稳健,不要求正态分布
数据干净且线性时用 Pearson:统计功效最高
小样本或有大量结时用 Kendall:估计更准确
永远不要只用一种:报告多种相关系数,全面了解变量间关系

💻 第四篇:数值方法

计算机实现的数值计算方法,是求解复杂数学模型问题的实用工具

4.1 插值与曲线拟合

定义 插值问题

给定 $n+1$ 个数据点 $(x_0, y_0), (x_1, y_1), \ldots, (x_n, y_n)$,找一个函数 $P(x)$ 使得:

$$P(x_i) = y_i, \quad i = 0, 1, \ldots, n$$

即函数曲线精确穿过所有已知数据点。

拉格朗日插值

方法 拉格朗日插值多项式

构造 $n$ 次多项式:

$$P_n(x) = \sum_{i=0}^n y_i \cdot L_i(x)$$

其中基函数:

$$L_i(x) = \prod_{j=0, j\neq i}^n \frac{x - x_j}{x_i - x_j}$$

特点:公式简洁,但增加新节点时需重新计算全部基函数。

牛顿插值

方法 牛顿插值多项式

使用差商形式:

$$P_n(x) = f[x_0] + f[x_0,x_1](x-x_0) + f[x_0,x_1,x_2](x-x_0)(x-x_1) + \cdots$$

优点:增加新节点时只需增加一项,便于逐步提高精度。

分段三次插值(样条)

定义 三次样条插值

在每个子区间 $[x_i, x_{i+1}]$ 上用三次多项式 $S_i(x)$ 插值,并保证:

  • $S_i(x_i) = y_i, \quad S_i(x_{i+1}) = y_{i+1}$(穿过数据点)
  • $S_i'(x_{i+1}) = S_{i+1}'(x_{i+1})$(一阶导连续)
  • $S_i''(x_{i+1}) = S_{i+1}''(x_{i+1})$(二阶导连续)

优势:避免高次多项式的Runge现象,曲线更光滑。

最小二乘拟合

方法 最小二乘法

给定 $m$ 个数据点 $(x_i, y_i)$,找一条直线 $y = ax + b$ 使得:

$$\min_{a,b} \sum_{i=1}^m (y_i - ax_i - b)^2$$

解:

$$a = \frac{m\sum x_iy_i - \sum x_i\sum y_i}{m\sum x_i^2 - (\sum x_i)^2}, \quad b = \frac{\sum y_i - a\sum x_i}{m}$$

与插值的区别:拟合曲线不一定穿过数据点,但使整体偏差最小,适合含噪声的实验数据。

🎯 建模应用:插值用于"补全"已知数据点之间的值(如温度场重建),拟合用于从含噪声数据中提取规律(如趋势预测)。
📊 插值与拟合方法对比
Python 代码:插值与拟合
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d, CubicSpline
from scipy.optimize import curve_fit

# 数据点
x_data = np.array([0, 1, 2, 3, 4, 5])
y_data = np.array([0, 0.8, 0.9, 0.1, -0.8, -1.0])

# 1. 拉格朗日插值(高次多项式)
from scipy.interpolate import BarycentricInterpolator
lagrange = BarycentricInterpolator(x_data, y_data)

# 2. 三次样条插值
cs = CubicSpline(x_data, y_data)

# 3. 最小二乘拟合(二次多项式)
coeffs = np.polyfit(x_data, y_data, 2)
poly2 = np.poly1d(coeffs)

# 绘图比较
x_fine = np.linspace(-0.5, 5.5, 500)
plt.figure(figsize=(10, 6))
plt.plot(x_data, y_data, 'ko', markersize=8, label='数据点')
plt.plot(x_fine, lagrange(x_fine), 'b--', linewidth=2, label='拉格朗日插值')
plt.plot(x_fine, cs(x_fine), 'r-', linewidth=2, label='三次样条')
plt.plot(x_fine, poly2(x_fine), 'g:', linewidth=2.5, label='最小二乘(二次)')
plt.legend()
plt.title('插值 vs 拟合')
plt.grid(True, alpha=0.3)
plt.savefig('interp_vs_fit.png', dpi=150)
plt.show()

4.2 函数优化方法

定义 优化问题

寻找变量 $x$ 使得目标函数 $f(x)$ 取得最小值(或最大值):

$$\min_{x} f(x) \quad \text{s.t.} \quad x \in \Omega$$

其中 $\Omega$ 是可行域。优化是建模竞赛中最常见的任务之一。

梯度下降法

方法 梯度下降(Gradient Descent)

从初始点 $x_0$ 出发,沿负梯度方向迭代更新:

$$x_{k+1} = x_k - \alpha \nabla f(x_k)$$

其中 $\alpha > 0$ 是学习率(步长)。

几何直观:梯度指向函数增长最快的方向,负梯度方向就是下降最快的方向。

牛顿法

方法 牛顿法(Newton's Method)

利用二阶信息(Hessian矩阵),收敛速度更快:

$$x_{k+1} = x_k - [H_f(x_k)]^{-1} \nabla f(x_k)$$

其中 $H_f$ 是Hessian矩阵(二阶偏导数组成的方阵)。

特点:二阶收敛,但每次需要计算和求逆Hessian,计算量大。

约束优化:拉格朗日乘数法

定理 拉格朗日乘数法

求 $f(x,y)$ 在约束 $g(x,y) = 0$ 下的极值:

步骤:

  1. 构造拉格朗日函数:$L(x,y,\lambda) = f(x,y) + \lambda g(x,y)$
  2. 解方程组:$\frac{\partial L}{\partial x} = 0, \quad \frac{\partial L}{\partial y} = 0, \quad \frac{\partial L}{\partial \lambda} = 0$
  3. 比较各驻点的函数值,确定极值
🎯 建模应用:资源分配(在预算约束下最大化效益)、参数优化(最小化误差)、路径规划(最短路径问题)等。
📊 函数优化可视化 - 梯度下降法
目标函数: f(x,y) = x² + 2y²
当前点: (3.0, 3.0) | 函数值: 27.00 | 迭代: 0
Python 代码:梯度下降与牛顿法
import numpy as np
import matplotlib.pyplot as plt

# 目标函数:f(x,y) = x² + 2y²
def f(x, y): return x**2 + 2*y**2
def grad_f(x, y): return np.array([2*x, 4*y])
def hessian_f(x, y): return np.array([[2, 0], [0, 4]])

# 梯度下降
def gradient_descent(start, lr=0.1, epochs=50):
    x = np.array(start, dtype=float)
    path = [x.copy()]
    for i in range(epochs):
        g = grad_f(x[0], x[1])
        x = x - lr * g
        path.append(x.copy())
        if np.linalg.norm(g) < 1e-6: break
    return x, path

# 牛顿法
def newton_method(start, epochs=20):
    x = np.array(start, dtype=float)
    path = [x.copy()]
    for i in range(epochs):
        g = grad_f(x[0], x[1])
        H = hessian_f(x[0], x[1])
        x = x - np.linalg.solve(H, g)
        path.append(x.copy())
        if np.linalg.norm(g) < 1e-6: break
    return x, path

# 运行比较
start = [3.0, 3.0]
opt_gd, path_gd = gradient_descent(start, 0.1)
opt_newton, path_newton = newton_method(start)

print(f"梯度下降: 最优点 ({opt_gd[0]:.6f}, {opt_gd[1]:.6f}), f={f(*opt_gd):.8f}")
print(f"牛顿法:   最优点 ({opt_newton[0]:.6f}, {opt_newton[1]:.6f}), f={f(*opt_newton):.8f}")
print(f"梯度下降迭代: {len(path_gd)-1}, 牛顿法迭代: {len(path_newton)-1}")

4.3 蒙特卡洛模拟

定义 蒙特卡洛方法

通过大量随机抽样来估计数学期望或概率的方法。

核心思想:根据大数定律,随机试验次数越多,频率越接近概率,样本均值越接近期望值。

$$\mathbb{E}[X] \approx \frac{1}{N}\sum_{i=1}^N X_i$$

类型一:面积/体积估算

例子 估算 π 值

在 $[-1, 1] \times [-1, 1]$ 正方形内随机投点,点落入内切圆(半径1)的概率为:

$$P = \frac{\text{圆面积}}{\text{正方形面积}} = \frac{\pi}{4}$$

因此 $\pi \approx 4 \times \frac{\text{落入圆内的点数}}{\text{总点数}}$。

类型二:概率估算

例子 生日问题

一个房间至少需要多少人,才能使至少两人生日相同的概率超过50%?

蒙特卡洛解法:随机生成 $n$ 个人的生日,重复模拟 $N$ 次,统计有重复的比例。

理论答案:23人(概率≈50.7%)。

类型三:积分计算

方法 蒙特卡洛积分

估算定积分:

$$\int_a^b f(x)\,dx \approx (b-a) \cdot \frac{1}{N}\sum_{i=1}^N f(X_i)$$

其中 $X_i \sim \text{Uniform}(a, b)$。

优势:对高维积分特别有效,不受维度灾难影响。

类型四:优化问题

方法 模拟退火(Simulated Annealing)

受冶金退火启发的随机优化算法:

  1. 从当前解 $x$ 随机扰动得到候选解 $x'$
  2. 如果 $f(x') < f(x)$,接受 $x'$
  3. 否则以概率 $e^{-\frac{f(x')-f(x)}{T}}$ 接受($T$ 是"温度")
  4. 逐渐降低 $T$,收敛到全局最优
🎯 建模应用:风险评估(投资组合VaR计算)、排队系统仿真、可靠性分析、复杂概率估算。
📊 蒙特卡洛模拟
Python 代码:蒙特卡洛方法集
import numpy as np

# 1. 估算 π
def estimate_pi(n=100000):
    x = np.random.uniform(-1, 1, n)
    y = np.random.uniform(-1, 1, n)
    inside = (x**2 + y**2 <= 1)
    return 4 * np.sum(inside) / n

# 2. 生日问题
def birthday_problem(n=23, simulations=10000):
    count = 0
    for _ in range(simulations):
        birthdays = np.random.randint(1, 366, n)
        if len(birthdays) != len(set(birthdays)):
            count += 1
    return count / simulations

# 3. 蒙特卡洛积分:∫₀¹ x²dx = 1/3
def monte_carlo_integral(n=100000):
    x = np.random.uniform(0, 1, n)
    return np.mean(x**2)

# 4. 布丰投针估算 π
def buffon_needle(n=10000, needle_length=0.5, line_spacing=1.0):
    x = np.random.uniform(0, line_spacing/2, n)
    theta = np.random.uniform(0, np.pi/2, n)
    crosses = (x <= needle_length/2 * np.cos(theta))
    p = np.mean(crosses)
    return (2 * needle_length) / (p * line_spacing)

print(f"π 估算: {estimate_pi():.6f}")
print(f"生日问题 (n=23): {birthday_problem():.4f}")
print(f"∫₀¹ x²dx ≈ {monte_carlo_integral():.6f} (理论: 0.3333)")
print(f"布丰投针 π ≈ {buffon_needle():.6f}")

📝 学习建议与资源推荐

建议 学习路径
  1. 第一步:先学线性代数(向量和矩阵是数据的基本表示)
  2. 第二步:再学微积分(理解变化和优化的基础)
  3. 第三步:最后学概率统计(数据分析的数学工具)
  4. 第四步:结合建模竞赛题目,将数学知识应用到实际问题中
推荐结合本页面内容与资源页的交互式演示进行学习。理论理解和动手实践相结合,效果最佳。遇到复杂公式推导时,可以用Python代码验证结果。
延伸 公开课资源

如果需要系统补课,可以进入数学课程资源导航,按中学数学、微积分、线性代数、概率统计和数学建模分类选择 MIT OCW、Khan Academy、国家智慧教育平台等公开课程。

查看课程资源 →