数据拟合丨人口预测模型

数据拟合丨人口预测模型


路漫漫其修远兮,吾将上下而求索

  下表所列是某地区1971一2000年的人口数据,试给出该地区人口增长的数学模型。

年 份时间变量 t t =年份-1970 人口 y/人年 份时间变量 t t =年份-1970 人口 y/人
197113381519861634520
197223398119871734507
197333400419881834509
197443416519891934521
197553421219902034513
197663421719912134515
197773434419922234517
197883445819932334519
197993449819942434519
1980103447619952534521
1981113448319962634521
1982123448819972734523
1983133451319982834525
1984143449719992934525
1985153451120003034527

  根据表中的数据,做出散点图,如图所示。
  由图可以看出,人口随时间的变化呈非线性变化,而且存在一个与横坐标轴平行的渐近线,故可以用Logistic曲线模型进行拟合。

  因为Logistic曲线模型的基本形式为

y=1a+bet y = 1 a + b e − t

  所以,只要令 y=1yx=et y ′ = 1 y , x ′ = e − t ,就可以将其转化为直线模型
y=a+bx y ′ = a + b x ′

   下面,用MATLAB进行回归分析拟合计算。回归拟合程序如下:

clear
clc
% 读入人口数据(1971-2000年)
Y=[33815    33981   34004   34165   34212   34327   34344   34458   34498   34476   34483   34488   34513   34497   34511   34520   34507   34509   34521   34513   34515   34517   34519   34519   34521   34521   34523   34525   34525   34527]
% 读入时间变量数据(t=年份-1970)
T=[1    2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30]
% 线性化处理
for t=1:30
    x(t)=exp(-t);
    y(t)=1/Y(t);
end
% 计算,并输出回归系数B,即计算回归方程 y'=a+bx' 中的a和b的值
c=zeros(30,1)+1;
X=[c,x'];%相当于30个方程组,求解a和b 的值.
B=inv(X'*X)*X'*y'
for i=1:30,
% 计算回归拟合值    
    z(i)=B(1,1)+B(2,1)*x(i);
% 计算离差
    s(i)=y(i)-sum(y)/30;
% 计算误差    
    w(i)=z(i)-y(i);
end
% 计算离差平方和S
S=s*s';
% 回归误差平方和Q
Q=w*w';
% 计算回归平方和U
U=S-Q;
% 计算,并输出F检验值
F=28*U/Q
% 计算非线性回归模型的拟合值
for j=1:30,
    Y(j)=1/(B(1,1)+B(2,1)*exp(-j));
end
% 输出非线性回归模型的拟合曲线(Logisic曲线)
plot(T,Y,'r*')

  运行结果:
这里写图片描述


  当数据较多时,从Excel中读取数据:

clear
clc
Y=xlsread('D:\file.xlsx',1,'B1:B30');%读取数据
Y=Y';
T=xlsread('D:\file.xlsx',1,'A1:A30');%读取数据
T=T';
for t=1:30,
    x(t)=exp(-t);
    y(t)=1/Y(t);
end
c=zeros(30,1)+1;
X=[c,x'];
B=inv(X'*X)*X'*y'%B=inv(X'*X)*X'*y'

for i=1:30,
    z(i)=B(1,1)+B(2,1)*x(i);
    s(i)=y(i)-sum(y)/30;
    w(i)=z(i)-y(i);
end
S=s*s';
Q=w*w';
U=S-Q;
F=28*U/Q
for j=1:30,
    Y(j)=1/(B(1,1)+B(2,1)*exp(-j));
end
plot(T,Y)

  运行结果:
这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值