如何利用MATLAB进行数据拟合?

前言

本文是科学计算与MATLAB语言课程的第5章第5、6小结的学习笔记,通过查阅本文,可以轻松掌握利用MATLAB进行数据拟合了。 E n j o y   y o u r   r e a d i n g ! Enjoy\ your\ reading! Enjoy your reading!
欢迎大家👍,收藏⭐,转发🚀,
如有问题、建议请您在评论区留言💬。

1 引例一人口预测问题

人口增长是当今世界上都关注的问题,对人口增长趋势进行预测是
各国普遍的做法。已知某国1790年到2010年间历次人口普查数据如
下表所示,请预测该国2020年的人口数。

年份179018001810182018301840185018601870188018901900
人口(百万)3.95.37.29.612.917.123.231.438.650.263.076.0
年份19101920193019401950196019701980199020002010
人口(百万)92.0105.7122.8131.7150.7179.3203.2226.5248.7281.4308.7

解题思路:找一个函数,去逼近这些数据,然后再根据找到的函数,计算预测点的值。

x=1790:10:2010;
y=[3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6, 50.2,63.0,76.0,92.0,105.7,122.8,131.7,150.7,179.3,203.2,226.5,248.7,281.4,308.7];
plot(x,y,'*');
p=polyfit(x,y,3);
polyval(p,2020)
plot(x,y,'*',x,polyval(p,x));

fig6

2 曲线拟合的原理

曲线拟合的原理
与数据插值类似,曲线拟合也是一种函数逼近的方法。

x x x x 1   x 2   . . . x k . . .   x n x_1 \ x_2 \ ...x_k...\ x_n x1 x2 ...xk... xn
y y y y 1   y 2   . . . y k . . .   y n y_1\ y_2 \ ...y_k...\ y_n y1 y2 ...yk... yn

y = f ( x ) y=f(x) y=f(x)
构造函数 g ( x ) g(x) g(x)去逼近未知函数 f ( x ) f(x) f(x),使得误差
δ = g ( x i ) − f ( x i ) ( i = 1 , 2 , 3 , … , n ) \delta=g(x_i)-f(x_i)(i=1,2,3,…,n) δ=g(xi)f(xi)(i=1,2,3,,n在某种意义下达到最小。
两个问题:
(1)用什么类型的函数做逼近函数?

多项式函数
(2)误差最小到底怎么计算?
最小二乘法
最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和来寻找数据的最佳函数匹配。
设p(x)是一个多项式函数
p ( x ) = a m x + a m − 1 x m − 1 + … + a 1 x + a o p(x)=a_mx+a_{m-1}x^{m-1}+…+a_1x+a_o px=amx+am1xm1++a1x+ao,且
∑ i = 1 n ( p ( x i ) − y i ) 2 \sum\limits_{i=1}^n(p(x_i)-y_i)^2 i=1np(xi)yi)2的值最小,
则p(x)为原函数y=f(x)的逼近函数。

3 曲线拟合的实现方法

MATLAB中的多项式拟合函数为polyfit(),其功能为求得最小二乘拟合多项式系数,其调用格式为:
(1)P=polyfit(X,Y,m)
(2)[P,S]=polyfit(X,Y,m)
(3)[P,S,mu]=polyfit(X,Y,m)
根据样本数据X和Y,产生一个m次多项式P及其在采样点误差数据S,mu是一个二元向量,mu(1)是mean(X),而mu(2)是std(X)。
[P,S,mu]=polyfit(X,Y,m)有什么用呢?mean(X)、std(X)又是什么意思呢?。mean函数是一个求数组平均值的函数,std函数是求标准差。
在引例中,我们已经用polyfit()函数预测了某国2020年的人口数。这个结果是否正确呢?我们无法得到2020年的数据,但是2016年的数据已经有了。所以,不妨再预测一下该国2016年的人口数。
polyval(p,2016)
ans=
327.0964
该国2016年人口数实际为323.1。
思考:相对误差1.24%,怎样才能减小?
问题分析:
据研究,一个国家的人口增长具有如下特点:
(1)发展越平稳,人口增长越有规律。
(2)当经济发展到一定水平时,人口增长率反而下降。
换言之,在不同的环境和经济发展水平,人口可能有不同的增长规律。
结论:
在人口增长数据的拟合上,应该将二战后至今这一时期的数据与此前的数据分开处理。

x=1950:10:2010;
y=[150.7,179.3,203.2,226.5,248.7,281.4,308.7];
p=polyfit(x,y,3)
p=polyfit(x,y,2);
plot(x,y,'*',x,polyval(p,x))
polyval(p,2016)
polyval(p,2020)
ans=
325.1696
ans=
336.7857%相对误差成功减小到0.64%!

结论:
(1)要对问题的背景进行详细的分析。
(2)采样点并非越多越好,适当的时候,可以减少采样点,分段进行拟合。

4 实际应用-家庭储蓄规律问题

以下是某市家庭收入x与家庭储蓄y之间的一组调查数据(单位:万元),试建立x与y的线性函数经验公式。

x0.61.01.41.82.22.63.03.43.84
y0.080.220.310.40.480.560.670.750.81.0
x=[0.6,1.0,1.4,1.8,2.2,2.6,3.0,3.4,3.8,4];
y=[0.08,0.22,0.31,0.4,0.48,0.56,0.67,0.75,0.8,1.0];
p=polyfit(x,y,1)
plot(x,y,'*',x,polyval(p,x))
p=
0.2390-0.0418  %经验公式:y=0.239x-0.0418

fig7
最后几组数据误差还是挺大的。
那么总结一下,曲线拟合有哪几种功能呢?
(1)估算数据
(2)预测趋势
(3)总结规律
数据拟合和数据插值有什么区别呢?
相同点:
(1)都属于函数逼近的方法;
(2)都可以通过离散有限的数据估算其他数据。
不同点:
(1)实现方法上,数据插值要求逼近函数经过样本点,而曲线拟合只需要每个数据点的误差平方和最小;
(2)结果形式上,数据插值往往没有统一的逼近函数,而数据拟合有统一的逼近函数;
(3)侧重点上,数据插值一般用于样本点区间内的数据计算,而曲线拟合不光可以估算区间内的数据,也可以对区间外的进行预测;
(4)应用场合上,如果样本点为精确数据,使用数据插值比较好,如果数据为统计数据,则使用曲线拟合更优。

小结

曲线拟合和数据插值有所不同,各有侧重。奥里给,学好它,让它为我所用。最后不要忘记
点赞👍,收藏⭐,转发🚀,
如有问题、建议请您在评论区留言💬。

  • 58
    点赞
  • 409
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值