打开工具 - 方法1: MATLAB - APP - Curve Fitting
打开工具 - 方法2: 命令行窗口:cftool(Curve Fitting Tool)
多项式曲线拟合公式: p(x) = p(1)*x^n + p(2)*x^(n-1) + ... + p(n)*x + p(n+1).
定义1: 用连续曲线近似地刻画或比拟平面上离散点组所表示的坐标之间的函数关系。
定义2: 在数值分析中,曲线拟合就是用解析表达式逼近离散数据,即离散数据的公式化。
最小二乘法: 通过" 最小化误差的平方和 "寻找与数据匹配的最佳函数,使得求得的函数(解析表达式)与实际数据之间误差的平方和为最小。
MathWorks官网:多项式曲线拟合(polyfit)
p = polyfit(x, y, n);
返回阶数为 n 的多项式系数,p为多项式系数向量,向量中的系数按降幂排列。该阶数是 y 中数据的最佳拟合(在最小二乘方式中)。
y = polyval(p, x);
计算多项式(p为系数向量)在(x)点出得函数值(y)
clear; % 删除工作区中项目,释放系统内存
clc; % 清空命令行窗口
close all; % 关闭句柄可见的所有图窗
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% (1)构建原始数据
x = 1:20;
y = -1.2*x + 2*randn(1, length(x));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% (2)多项式曲线拟合
p = polyfit(x, y, 1); % 多项式曲线拟合
f = polyval(p, x); % 多项式计算
% p = polyfit(log(x), y, 2); % 多项式(对数)曲线拟合
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% (3)开始画图
figure; % 创建图窗窗口
scatter(x, y); % 原始数据。scatter:绘制散点图。
hold on; % 添加新绘图时,保留当前绘图
plot(x, f, 'Color', 'r'); % 拟合曲线。plot:画图
xlabel('x'); % 添加 x 轴标签
ylabel('y'); % 添加 y 轴标签
title('Polynomial curve fitting'); % 添加标题
legend('data', 'linear fitting'); % 添加图例
[p, S] = polyfit(x, y, n)
将返回一个结构体 S,可用作 polyval 的输入来获取误差估计值。
[y, delta] = polyval(p, x, S)
使用 polyfit 生成的可选输出结构体 S 来生成误差估计值。delta 是使用 p(x) 预测 x 处的未来观测值时的标准误差估计值。
clear; % 删除工作区中项目,释放系统内存
clc; % 清空命令行窗口
close all; % 关闭句柄可见的所有图窗
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x = 1:100;
y = -0.3*x + 2*randn(1,100);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[p, S] = polyfit(x, y, 1);
[f, delta] = polyval(p, x, S);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 绘制原始数据、线性拟合、95%预测区间(y±2Δ)。
plot(x, y, 'bo')
hold on
plot(x, f, 'r-')
plot(x, f+2*delta, 'm--', x, f-2*delta, 'm--')
title('Linear Fit of Data with 95% Prediction Interval')
legend('Data','Linear Fit','95% Prediction Interval')