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如何做线性最小二乘拟合。

一、问题再现

MATLAB解决线性最小二乘拟合_第1张图片
问题已经给出 ( x i , y i ) (x_i,y_i) (xi,yi),那么我们先要画出散点图看一看性态

二、散点图绘制

MATLAB解决线性最小二乘拟合_第2张图片

>> 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,根据线性最小二乘法原理
MATLAB解决线性最小二乘拟合_第3张图片
MATLAB解决线性最小二乘拟合_第4张图片

MATLAB解决线性最小二乘拟合_第5张图片
MATLAB解决线性最小二乘拟合_第6张图片
上面这一张图最关键a左除y。和心原理就在于构建R和y。

三、构建R和y求解

MATLAB解决线性最小二乘拟合_第7张图片

>> 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
计算出来之后,我们不要忘记画图进行验证,看看效果!

四、画图验证

MATLAB解决线性最小二乘拟合_第8张图片
效果不错,符合整体形态

>> 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实现,是一个不可多得好文章,希望未来静下心来学习,大智若愚,求知若渴。

你可能感兴趣的:(数学建模,matlab,数学建模)