MATLAB解决线性最小二乘拟合

本博文源于MATLAB建模,拟合问题是指给定平面上n个点 ( x i , y i ) ( i = 1 , . . . , n ) (x_i,y_i)(i=1,...,n) (xi,yi)(i=1,...,n)寻求一个函数(曲线)y=f(x),使f(x)在某种准则下与所有数据点最为接近。而问题首要关键的是确定f(x)表达式的形式,一般我们会有两种方法:1、根据机理模型确定f(x)比如人口问题,2、根据画图来确定。而本文就以一道例题来告诉大家MATLAB如何做线性最小二乘拟合。

一、问题再现

在这里插入图片描述
问题已经给出 ( x i , y i ) (x_i,y_i) (xi,yi),那么我们先要画出散点图看一看性态

二、散点图绘制

在这里插入图片描述

>> x = 0:0.1:1;
>> y = [-0.447,1.978,3.28,6.16,7.08,7.34,7.66,9.56,9.48,9.30,11.2];
>> plot(x,y,'rp')
>> 

问题上说我们要配二次多项式,那么我们就要根据线性最小二乘法原理进行求解

三、线性最小二乘法核心原理

图形只是让我们看见它的形态,我们最重要确定
f ( x ) = a 1 x 2 + a 2 x + a 3 f(x)=a_1x^2+a_2x+a_3 f(x)=a1x2+a2x+a3
a 1 , a 2 , a 3 a_1,a_2,a_3 a1,a2,a3,根据线性最小二乘法原理
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
上面这一张图最关键a左除y。和心原理就在于构建R和y。

三、构建R和y求解

在这里插入图片描述

>> x = 0:0.1:1;
>> y = [-0.447,1.978,3.28,6.16,7.08,7.34,7.66,9.56,9.48,9.30,11.2];
>> R=[(x.^2)',x',ones(11,1)];
>> A = R\y'

A =

   -9.8108
   20.1293
   -0.0317

>> 

我们计算得出 A = [ − 9.8108 , 20.1293 , − 0.0317 ] f ( x ) = − 9.8108 x 2 + 20.1293 x − 0.0317 A=[-9.8108,20.1293,-0.0317]\\ f(x)=-9.8108x^2+20.1293x-0.0317 A=[9.8108,20.1293,0.0317]f(x)=9.8108x2+20.1293x0.0317
计算出来之后,我们不要忘记画图进行验证,看看效果!

四、画图验证

在这里插入图片描述
效果不错,符合整体形态

>> x = 0:0.1:1;
>> y = [-0.447,1.978,3.28,6.16,7.08,7.34,7.66,9.56,9.48,9.30,11.2];

>> plot(x,y,'rp')
>> R=[(x.^2)',x',ones(11,1)];
>> A = R\y'

A =

   -9.8108
   20.1293
   -0.0317


>> y1 = -9.8108*x.^2+20.1293*x-0.0317;
>> plot(x,y,'rp',x,y1)
>> 

五、总结

在数据建模中,画图是一种最为直观了解数据的方法,通过对图形观察找到合适函数,进而解决问题,在现实问题中,我们进行求解不仅要做求解还需要假设检验等。这是本文欠缺的,但本文较为直观的给出一般线性最小二乘拟合的MATLAB实现,是一个不可多得好文章,希望未来静下心来学习,大智若愚,求知若渴。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值