MATLAB程序看不懂
clc;
close all;
clear
t=2001:2021;t0=2016:2021;x=2001:2021;
%2001-2021 人口统计预测
N=[127627 128453 129227 129988 130756 131447 132129 132802 133450 134091 134915 135922 136726 137646 138326 139232 140011 140541 141008 141212 141260];
%2016-2021 人口统计预测
N1=[139232 140011 140541 141008 141212 141260];
%2016-2021 人口官方预测数据
N2=[141120 141730 142310 142920 143430 143840];
y3=log(N);
A=[ones(21,1), t' ];
d3=A\ y3' ;
a=d3(1);b=d3(2);
N3=exp(a+b*t0);
yy3=exp(a+b*x);
B=[ones(21,1), t',(t.*t)',(t.*t.*t)' ];
y4=N';
d4=B\y4;a0=d4(1);a1=d4(2);a2=d4(3);a3=d4(4);
N4=a0+a1*t0+a2*t0.*t0+a3*t0.*t0.*t0;
yy4=a0+a1*x+a2*x.*x+a3*x.*x.*x;
q2=100*(N2-N1)./N1;q3=100*(N3-N1)./N1;q4=100*N4./N1;
plot(x,yy3,'r:',x,yy4,'k-.',t,N,'co',t0,N1,'*',t0,N3,'+',t0,N2,'.')
这个MATLAB程序用来预测2001-2021年人口统计。首先,通过计算并记录2001-2021年的人口数据,并用一条曲线(红色点划线)来进行拟合。然后,通过计算并记录2016-2021年的官方预测人口数据,并用一条曲线(黑色点划线)来进行拟合。最后,将两条拟合曲线与实际数据进行比较,并计算两条拟合曲线的百分比误差,并将所有数据绘制在一个图上。
下面是这个程序的详细注释:
clc; % 清除命令行
close all; % 关闭所有图像窗口
clear % 清除所有变量
% 设置时间范围,包括历史数据和预测数据
t=2001:2021; % 历史数据
t0=2016:2021; % 预测数据
x=2001:2021; % 用于绘图的数据
% 记录2001-2021年的人口数据
N=[127627 128453 129227 129988 130756 131447 132129 132802 133450 134091 134915 135922 136726 137646 138326 139232 140011 140541 141008 141212 141260];
% 记录2016-2021年的官方预测人口数据
N1=[139232 140011 140541 141008 141212 141260];
% 记录2016-2021年的人口预测数据
N2=[141120 141730 142310 142920 143430 143840];
% 对历史数据进行对数变换
y3=log(N);
% 构造矩阵A,用于拟合对数变换后的数据
A=[ones(21,1), t' ];
% 使用最小二乘法对对数变换后的数据进行拟合
d3=A\ y3' ;
% 获取拟合参数
a=d3(1);
b=d3(2);
% 使用拟合参数计算预测值
N3=exp(a+b*t0);
% 使用拟合参数计算拟合曲线
yy3=exp(a+b*x);
% 构造矩阵B,用于拟合原始数据
B=[ones(21,1), t',(t.*t)',(t.*t.*t)' ];
% 使用最小二乘法
y4=N';
d4=B\y4;a0=d4(1);a1=d4(2);a2=d4(3);a3=d4(4);
N4=a0+a1*t0+a2*t0.*t0+a3*t0.*t0.*t0;
yy4=a0+a1*x+a2*x.*x+a3*x.*x.*x;
q2=100*(N2-N1)./N1;q3=100*(N3-N1)./N1;q4=100*N4./N1;
%绘图
plot(x,yy3,'r:',x,yy4,'k-.',t,N,'co',t0,N1,'*',t0,N3,'+',t0,N2,'.')