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

MATLAB —— polyfit()多项式曲线拟合(线性拟合/线性回归)多项式曲线拟合公式 p x p 1 x n p 2 x n 1 p n x p n 1 matlabpolyfi

大家好,欢迎来到IT知识分享网。


一、算法简介

打开工具 – 方法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: 在数值分析中,曲线拟合就是用解析表达式逼近离散数据,即离散数据的公式化。
最小二乘法: 通过” 最小化误差的平方和 “寻找与数据匹配的最佳函数,使得求得的函数(解析表达式)与实际数据之间误差的平方和为最小。
备注:多项式曲线拟合算法的原理基于最小二乘法。其中:一阶最小二乘法对应线性拟合算法,其余阶数对应曲线拟合算法。



二、公式推导与指标计算

曲线拟合算法的公式推导与指标计算

三、项目实战:多项式曲线拟合(一阶)

在这里插入图片描述

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保存了每个阶数的拟合优度,可以绘制该结果提取该数据对应的最优阶数。 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/120361.html

(0)
上一篇 2025-10-30 11:26
下一篇 2025-10-30 11:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信