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