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

如何利用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年的人口数。

年份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));

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

p(x)=am​x+am−1​xm−1+…+a1​x+ao​,且

i

=

1

n

p

(

x

i

)

y

i

)

2

\sum\limits_{i=1}^n(p(x_i)-y_i)^2

i=1∑n​(p(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.84y0.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

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

小结

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

相关推荐

365体育手机版官网 第15章 双飞

第15章 双飞

📅 08-09 👁️ 3449
365体育手机版官网 魔兽世界禁言怎么解封

魔兽世界禁言怎么解封

📅 08-23 👁️ 9280
beat365中文版 地下城与勇士手游狂战士称号选择攻略