matlab中可用polyfit函数实现多项式最小二乘拟合,支持基本拟合、误差估计、中心化缩放、交互式验证及多阶对比五种方法,分别适用于精度要求、数值稳定性、教学探索与过拟合识别等场景。

如果您在MATLAB中需要根据离散数据点构造一个多项式函数,使其在最小二乘意义上最优逼近原始数据,则可使用polyfit函数实现多项式拟合。以下是具体操作方法:
一、基本多项式拟合
该方法利用polyfit直接计算指定阶数的多项式系数,适用于数据量适中、无显著数值不稳定性的场景。其核心是构建Vandermonde矩阵并求解最小二乘问题。
1、准备已知数据向量x和y,确保二者长度一致且为列向量或行向量;
2、调用p = polyfit(x, y, n),其中n为期望的多项式阶数,返回系数向量p,按降幂排列;
3、使用polyval(p, x_new)在新横坐标x_new上计算拟合值;
4、绘图验证:plot(x, y, 'o')显示原始数据点,hold on后plot(x_new, y_new, '-')绘制拟合曲线。
二、带误差估计的多项式拟合
该方法除返回系数外,还提供结构体S,可用于评估拟合精度与预测不确定性,适用于对结果可信度有量化要求的分析任务。
1、调用[p, S] = polyfit(x, y, n),获取系数p与误差估计结构体S;
2、调用[y_fit, delta] = polyval(p, x_new, S),得到拟合值y_fit及对应标准误差边界delta;
3、使用fill_between或errorbar绘制带置信带的拟合曲线;
4、检查S.rsquared字段(R²值),R²越接近1表示拟合优度越高。
三、中心化与缩放的稳健拟合
当x数据范围较大或n较高时,原始坐标易导致Vandermonde矩阵病态,引发系数失真;引入均值与标准差归一化可显著提升数值稳定性。
1、调用[p, S, mu] = polyfit(x, y, n),获取中心化参数mu = [mean(x), std(x)];
2、在polyval中传入mu作为第四个参数:y_new = polyval(p, x_new, S, mu);
3、此时polyfit内部自动将x映射为(x − mu(1))/mu(2),避免高次幂运算引起的浮点溢出或舍入误差;
4、注意x_new也需参与相同变换,或直接使用polyval的内置处理逻辑。
四、交互式拟合辅助验证
该方法不依赖命令行编码,适合快速试探不同阶数、观察残差分布及异常点影响,常用于教学演示或初步建模探索。
1、在MATLAB命令窗口输入basicfitting,启动Basic Fitting界面;
2、导入工作区中的x和y变量;
3、勾选“Plot fits”并选择多项式阶数(如linear、quadratic、cubic等);
4、点击“Residuals”按钮查看误差分布图,残差应呈随机散布而非明显趋势;
5、勾选“Show equations”显示拟合表达式,支持复制至编辑器复用。
五、多阶对比与过拟合识别
该方法通过并行拟合多个阶次多项式,可视化比较其在训练集与扩展区间的表现差异,帮助识别过拟合现象。
1、定义阶数向量n_vec = [1, 3, 5, 9];
2、对每个n循环执行p_n = polyfit(x, y, n),并计算y_n = polyval(p_n, x);
3、在同一figure中plot(x, y, 'ko')标出原始点,叠加各阶拟合曲线;
4、另起figure绘制各阶拟合在区间外(如x_ext = linspace(min(x)*0.8, max(x)*1.2))的延拓行为;
5、观察到高阶多项式在端点剧烈振荡时,表明存在Runge现象,应降低阶数或改用分段拟合。










