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

文章目录

  • 前言
  • 1 引例一人口预测问题
  • 2 曲线拟合的原理
  • 3 曲线拟合的实现方法
  • 4 实际应用-家庭储蓄规律问题
  • 小结

前言

本文是科学计算与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年的人口数。

年份 1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900
人口(百万) 3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 63.0 76.0
年份 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000 2010
人口(百万) 92.0 105.7 122.8 131.7 150.7 179.3 203.2 226.5 248.7 281.4 308.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));

如何利用MATLAB进行数据拟合?_第1张图片

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的线性函数经验公式。

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
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

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

小结

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

你可能感兴趣的:(《科学计算与MATLAB语言》,matlab,数据分析,线性代数,矩阵)