本博文源于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,根据线性最小二乘法原理
>> 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.1293x−0.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实现,是一个不可多得好文章,希望未来静下心来学习,大智若愚,求知若渴。