最小二乘法曲线拟合以及Matlab实现

最⼩⼆乘法曲线拟合以及Matlab 实现
最⼩⼆乘法曲线拟合以及Matlab 实现
在实际⼯程中,我们常会遇到这种问题:已知⼀组点的横纵坐标,需要绘制出⼀条尽可能逼近这些点的曲线(或直线),以进⾏进⼀步进⾏加⼯或者分析两个变量之间的相互关系。⽽获取这个曲线⽅程的过程就是曲线拟合。⽬录最⼩⼆乘法直线拟合原理曲线拟合
Matlab实现代码
最⼩⼆乘法直线线拟合原理
⾸先,我们从曲线拟合的最简单情况——直线拟合来引⼊问题。如果待拟合点集近似排列在⼀条直线上时,我们可以设直线  为其拟合⽅程,系数
为待求解项,已知:
⽤矩阵形式表达为:
,其中:
要求解A,可在⽅程两边同时左乘  的逆矩阵,如果它是⼀个⽅阵且⾮奇异的话。
但是,⼀般情况下  连⽅阵都不是,所以我们在此需要⽤  构造⼀个⽅阵,即⽅程两边同时左乘  的转置矩阵,得到⽅程:  。
此时,⽅程的系数矩阵  为⽅阵,所以两边同时左乘新系数矩阵  的逆矩阵,便可求得系数向量A ,即: 。
⽅程 右边各部分均已知,所以可直接求解得到拟合直线的⽅程系数向量A。曲线线拟合
当样本点的分布不为直线时,我们可⽤多项式曲线拟合,即拟合曲线⽅程为n阶多项式
⽤矩阵形式表⽰为:
,其中:待求解项为系数向量。
曲线拟合⽅程 的求解⽅法与上⾯直线的求解⽅法⼀样,也是在⽅程 两边同左乘的转置矩阵得到: ,y =ax +b A =[a ,b ]Y =X A 0X 0X 0X 0X 0X Y =0T X X A 0T 0X X 0T 0X X 0T 0(X X )X Y =0T 0−10T A A =(X X )X Y 0T 0−10T
y =a x =∑i =0n
i i a x +n n a x +n −1n −1...+a x +1a 0Y =X A 0A =[a ,a ,...,a ,a ,a ]n n −1210T Y =X A 0Y =X A 0X 0X Y =0T X X A 0T
再同时在新⽅程两边同时左乘 的逆矩阵,得到:上式左边各部分均已知,所以可直接求解得拟合曲线⽅程的系数向量A。Matlab 实现代码
%by hanlestudy@163
clear
clc
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);
for n=1:9
X0=zeros(n+1,k);
for k0=1:k          %构造矩阵X0
for n0=1:n+1
X0(n0,k0)=x(k0)^(n+1-n0);
end
end
X=X0';
ANSS=(X'*X)\X'*y';
for i=1:n+1          %answer 矩阵存储每次求得的⽅程系数,按列存储
answer(i,n)=ANSS(i);
end
x0=0:0.01:17;
y0=ANSS(1)*x0.^n    ;%根据求得的系数初始化并构造多项式⽅程
for num=2:1:n+1
y0=y0+ANSS(num)*x0.^(n+1-num);
end
subplot(3,3,n)
plot(x,y,'*')
hold on
plot(x0,y0)
end
suptitle('不同次数⽅程曲线拟合结果,从1到9阶')
运⾏结果
拟合曲线结果:
X X 0T 0(X X )X Y =0T 0−10T
A
可以看出看来,当多项式的阶数过⼩是,曲线并不能很好地反映出样本点的分布情况;但阶数过⾼时,会出现过拟合的情况。
系数矩阵answer:
Matlab⾃带函数——polyfit
在matlab中,也有现成的曲线拟合函数polyfit,其也是基于最⼩⼆乘原理实现的,具体⽤法为:ans=polyfit(x,y,n). 其中x,y为待拟合点的坐标向量,n为多项式的阶数。
下⾯代码是⽤polyfit函数来做曲线拟合:
clear
clc
x=[2,4,5,6,6.8,7.5,9,12,13.3,15];
[~,k]=size(x);
y=[-10,-6.9,-4.2,-2,0,2.1,3,5.2,6.4,4.5];
for n=1:9
ANSS=polyfit(x,y,n);  %⽤polyfit拟合曲线
for i=1:n+1          %answer矩阵存储每次求得的⽅程系数,按列存储      answer(i,n)=ANSS(i);
end
x0=0:0.01:17;
y0=ANSS(1)*x0.^n    ; %根据求得的系数初始化并构造多项式⽅程    for num=2:1:n+1
y0=y0+ANSS(num)*x0.^(n+1-num);
end
subplot(3,3,n)
plot(x,y,'*')
hold on
plot(x0,y0)
end
拟合直线suptitle('不同次数⽅程曲线拟合结果,从1到9阶')
运⾏结果:
⽤polyfit拟合的结果与第⼀份代码运⾏的结果基本⼀样
申明
本⽂为本⼈原创,转载请注明出处!

本文发布于:2024-09-21 19:31:09,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/359919.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:拟合   曲线拟合   曲线   系数   直线   矩阵   求解
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议