matlab 最小二乘法拟合_最小二乘法浅析逐飞科技

最小二乘法浅析--逐飞科技

为什么要讨论这个方法,因为在智能车制作的过程中经常遇到求斜率这样的问题,但由于数据是离散的,普通方法不是很方便,效果也不是太好,这个时候最小二乘法就可以派上用场,比如用于曲线拟合,使用最小二乘法来拟合这些离散的点,拟合了之后就可以根据曲线来补线,通过这种方法来补线的效果应该还是不错的,当然用处一定不止这一点,其他需求或场景就需要根据自己的想法来使用了,我们今天主要讲讲方法的原理和拟合的方法,接下来进入正文。

一、什么是最小二乘法

最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。简单的说,这里的“二乘”指的是用平方来度量观测点与估计点的远近(在古汉语中“平方”称为“二乘”),“最小”指的是参数的估计值要保证各个观测点与估计点的距离的平方和达到最小。如下图所示是一个线性拟合,红色的线代表观测点与估计点的距离,使得这些距离的平方和最小这样就是最小二乘法。

c654f7c2db4cc5ce00e08ebf4d076929.png

二、直线拟合计算

e1371e79d6ce981244eb7654b41b5881.png

三、直线拟合matlab仿真

我们使用matlab来实际验证一下,代码如下:

%录入X轴数据  

for a = 1:30   

    x(a) = a-1;  

end  

%录入Y轴数据  

y=[1,2,3,8,6,9,5,4,8,5,9,19,16,12,15,24,22,36,40,40,32,32,36,39,52,52,56,57,62,69];  

figure  

plot(x,y,'.');%画点  

hold on  

b = ( mean(x*y(:)) - mean(x(:)).*mean(y(:)) )/( mean(x*x(:))-mean(x(:))^2 );%求直线斜率  

a = mean(y(:))-b*mean(x(:));%求直线常数  

y1 = a+b*x;%直线表达式  

plot(x,y1);  

hold off  

拟合效果图如下:

e02502718a037ceac7ec3996cc4a4c69.png

四、多项式的曲线拟合计算

89bbcff7365fae26df71a32453f0847c.png

25d850d9ff19337c04f69279ebc3cff2.png

五、曲线matlab仿真

我们使用matlab来实际验证一下,代码如下:

%录入X轴数据  

for a = 1:30   

    x(a) = a-1;  

end  

%录入Y轴数据  

y=[1,2,3,6,6,7,8,9,8,10,9,19,16,14,15,24,28,36,40,40,42,41,37,39,52,52,56,57,62,69];  

figure  

plot(x,y,'.');%画点  

hold on  

k=3;%阶数  阶数可以在1-5之间更改看效果,记得每次更改了之后clear workspace然后在运行  

%X数据录入  

for a = 0:k  

    for i = 1:30  

        X(i,(a+1)) = x(i).^(a);  

    end  

end  

Y = y';  

A = (X'*X)^-1*X'*Y;%求矩阵系数A  

A = A';%转置矩阵方便使用  

z = 0:0.1:30;  

if k==5  

    y1 = A(1)+A(2).*z+A(3).*z.^2+A(4).*z.^3+A(5).*z.^4+A(6).*z.^5;%最后表达式用于绘图  

elseif k==4  

    y1 = A(1)+A(2).*z+A(3).*z.^2+A(4).*z.^3+A(5).*z.^4;%最后表达式用于绘图  

elseif k==3  

    y1 = A(1)+A(2).*z+A(3).*z.^2+A(4).*z.^3;%最后表达式用于绘图  

elseif k==2  

    y1 = A(1)+A(2).*z+A(3).*z.^2;%最后表达式用于绘图  

elseif k==1  

    y1 = A(1)+A(2).*z;%最后表达式用于绘图  

end  

plot(z,y1);  

hold off  

曲线拟合效果图效果图如下: 

一阶:

2863e28081ada8e5ab1de2c9a04755da.png

三阶: 

9329300b034784610dbf1c4906659fb6.png

五阶:

06a11e006d467b93d82d041d23297e13.png

六、总结

总结一句话:不管你用什么曲线拟合,可以用多项式、直线等,只要能使得每个误差的平方和最小即可。

可能有的人看到公式什么的就头疼,其实掌握这个算法其实只要理解“平方和为最小”基本就掌握最主要的思想了,具体怎么运算都是学过的数学知识,只需要将这个过程用程序表达出来就能实现想要的效果,所以想到这里才恍然大悟,原来程序员是翻译专业,将所学的数学、逻辑等按程序语言的语法,翻译成正确的代码,就完成了程序员的工作。

点击以下标题可回顾20天备战第十五届智能车竞赛的往期内容:
  • 20天备战第十五届智能车竞赛--逐飞科技
  • 全新声音信标系统安装步骤及说明书--逐飞科技
  • IAR 环境使用教程--逐飞科技
  • MDK环境使用教程--逐飞科技
  • Tasking 环境使用教程--逐飞科技
  • 20天备战智能车之NXP库使用教程--逐飞科技
  • 20天备战智能车之TC264库使用教程--逐飞科技
  • 20天备战智能车之STC库使用教程--逐飞科技
  • STC8H系列正交解码示例--逐飞科技
  • 20天备战智能车之硬件篇--逐飞科技
  • 20天备战智能车之C车舵机、编码器安装--逐飞科技
  • H车编码器及摄像头、电感支架安装视频教程--逐飞科技
  • RT1064摄像头采集、显示视频教程--逐飞科技
  • 基于RT1064的ICM六轴模块采集、显示教程--逐飞科技
  • 基于RT1064的4种屏幕使用视频教程--逐飞科技
  • 基于RT1064的编码器数据采集 视频教程--逐飞科技
  • 基于RT1064的舵机控制视频教程--逐飞科技
  • 基于RT1064的两种MOS电机驱动使用视频教程--逐飞科技
  • 基于STC单片机的三种屏幕使用视频教程--逐飞科技
  • 基于STC的ICM20602六轴模块数据采集视频教程--逐飞科技
  • 基于STC的编码器数据采集及STC单片机自动下载 视频教程--逐飞科技
  • 基于TC264的摄像头、编码器、舵机使用视频教程--逐飞科技
  • 基于TC264的两种电机驱动使用教程及PID算法浅析--逐飞科技
  • 基于TC264的FM、麦克风及ICM20602模块的数据采集教程--逐飞科技
  • 电磁及摄像头(总钻风)寻迹算法浅析--逐飞科技
  • 真香警告:逐飞英飞凌TC264智能车开源库来啦
  • 逐飞TC264开源库硬核更新 ----软件FFT实现及RAM分配
  • 逐飞科技贡献:i.MX RT1064开源库
  • 逐飞“STC智能车开源库”正式上线
  • 逐飞“STC8H智能车开源库”也来了
  • STC节能平衡小车浅析--By“逐飞科技”
  • STC节能平衡小车出入库浅析--By“逐飞科技”
  • 是哪儿在“啾啾啾”?--By逐飞科技
  • 基础四轮不基础之总钻风前后双摄--By逐飞科技
  • 双车接力之四轮后车--逐飞科技
  • 双车组之“人工智能”接力--逐飞科技
  • 再谈第十五届智能车竞赛芯片选型浅析--逐飞科技

今天的分享就到这里了,“20天备战智能车”专辑连载明天继续,希望大家喜欢。如果各位还希望看到其他分享也欢迎通过逐飞科技公众号的留言功能给我们留言,也可通过加入下方的QQ群给我们留言交流:

逐飞科技__智能车③部:824575535

智能车声音信标组--逐飞科技:1121080980

AI电磁组交流群--逐飞科技:1077051054

本文由“逐飞科技”编辑整理,时间仓促,水平有限,难免有误,大神轻拍,欢迎交流指正。愿智能车世界更美好!

055174a4349050fe031d4d3595a9c548.png

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值