拟合算法
拟合算法
与插值算法不同,拟合算法不要求曲线严格经过所有数据点,而是寻求一个函数(曲线),使得该曲线在某种准则下与所有数据点的总体误差最小。拟合的核心目标是通过对已有数据特征拟合构建最佳数学模型,广泛应用于趋势预测、参数估计等领域。
一、与插值的区别
| 方法 | 特点 | 适用场景 |
|---|---|---|
| 插值 | 曲线必须经过所有样本点,易受龙格现象影响 | 数据精确、样本量少 |
| 拟合 | 曲线无需经过所有点,通过最小化误差平方和寻找全局最优解 | 数据含噪声、趋势分析 |
当样本点过多时,高阶插值多项式会出现震荡现象,而拟合算法通过低阶函数(如线性、指数函数)能更稳定地反映数据趋势。
二、原理
1. 数学模型
设样本点为 $(x_i, y_i), i = 1, 2, \ldots, n$,拟合曲线为 $y = kx + b$,目标是最小化误差平方和:
$$
\min_{k,b} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 \quad \text{其中} \quad \hat{y}_i = kx_i + b
$$
2. 参数求解
通过求偏导并令导数为零,可得闭合解:
$$
k = \frac{n \sum x_i y_i - \sum x_i \sum y_i}{n \sum x_i^2 - (\sum x_i)^2}, \quad
b = \frac{\sum x_i^2 \sum y_i - \sum x_i \sum x_i y_i}{n \sum x_i^2 - (\sum x_i)^2}
$$
3. 拓展
多项式线性,如二次函数等:
$$
\quad \hat{y}_i = kx_i + kx_i^2 + b
$$
三、拟合优度评价
1. 判定系数 $R^2$
- 总体平方和(SST):反映数据总波动
$$ SST = \sum_{i=1}^n (y_i - \overline{y})^2 $$ - 误差平方和(SSE):反映拟合误差
$$ SSE = \sum_{i=1}^n (y_i - \hat{y}_i)^2 $$ - 回归平方和(SSR):反映模型解释的波动
$$ SSR = \sum_{i=1}^n (\hat{y}_i - \overline{y})^2 $$
拟合优度:
$$ R^2 = \frac{SSR}{SST} = 1 - \frac{SSE}{SST} $$
- $ R^2 \in [0, 1] $,越接近1说明拟合效果越好。
- 注意:$ R^2 $ 仅适用于线性参数模型(如 $ y = a + bx^2 $ 视为线性,因其对参数 (a,b) 为线性)。
四、MATLAB实现
1. 代码示例
1 | |
2. 拟合工具箱(cftool)
输入 cftool 调用MATLAB拟合工具箱,支持多种函数类型(多项式、指数、自定义方程),自动计算参数及拟合优度。
五、应用
案例1:美国人口预测
使用Logistic模型拟合历史数据:
$$
x(t) = \frac{x_m}{1 + \left( \frac{x_m}{3.9} - 1 \right) e^{-r(t-1790)}}
$$
通过非线性最小二乘法估计参数 $x_m$ 和 $r$,预测未来30年人口趋势。
案例2:鱼类生长模型
对鲨鱼体长-体重数据采用指数和正弦函数拟合,通过SSE选择最优模型:
$$
\text{体长增长方程:} \quad y = 69.32e^{-0.004x} \quad (R^2 = 0.9704)
$$
六、总结
- 适用场景:数据含噪声、需提取整体趋势、变量间关系复杂时优先选用拟合。
- 模型选择:优先线性参数模型以利用 $R^2$ 评价,非线性模型直接比较SSE。
- 工具推荐:MATLAB cftool可快速实现多函数拟合与可视化。