MATLAB —— polyfit()多项式曲线拟合(线性拟合/线性回归)


一、算法简介

打开工具 - 方法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')

五、项目实战:多项式曲线拟合(1到9阶)

在这里插入图片描述

% 在matlab中,polyfit曲线拟合函数是基于最小二乘法原理实现的。
clear;clc;close all;
x = [2,4,5,6,6.8,7.5,9,12,13.3,15];
y = [-10,-6.9,-4.2,-2,0,2.1,3,5.2,6.4,4.5];
[~, k] = size(x);
R_2 = [];
for n = 1:9
    p = polyfit(x,y,n);  	% 多项式拟合系数
	f = polyval(p, x);		% 多项式拟合结果
	
	% SST基本等于SSE+SSR。
	SSR = sum((f-mean(y)).^2); 		% 回归平方和
	SSE = sum((f-y).^2); 			% 误差平方和
	SST = sum((y-mean(y)).^2); 		% 总体平方和
	R_2 = [R_2, SSR/SST];			% 拟合优度(R^2),又叫可决系数。
	disp(SSR)
	disp(SSE)
	disp(SST)
	disp(R_2)

    subplot(3, 3, n)
    plot(x, y, '*')
    hold on
    plot(x, f)
    title(n)
    grid on					
end
suptitle('1到9阶方程的曲线拟合结果')

% 说明:R^2越接近于1,拟合效果越好。但是损失不是越小越好,因为损失过小可能造成过拟合的情况。
% 结论:R_2保存了每个阶数的拟合优度,可以绘制该结果提取该数据对应的最优阶数。
  • 30
    点赞
  • 225
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖墩会武术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值