如何使用matlab建立人口预测模型
在数学建模和学习中,我们有时可能需要建立一些非线性的模型,显然非线性模型计算量相对线性模型更加复杂。因此,有时我们需要将一些非线性模型转化为线性模型进行处理,借助相对成熟的线性模型来研究复杂的非线性模型,不仅能大大减少我们的计算量,更便于我们对模型进行检验和修正。下面我们通过matlab来建立Logistic人口预测模型,并将其转化为线性模型进行处理。
常见人口预测模型有Logistic模型,人口指数增长模型,当然我们也可以采用人工神经网络及灰色预测模型来建立人口预测模型。接下来,我将以Logistic模型为例示范如何将一个非线性模型转化为线性模型并进行模型参数求解与检验,首先,我们有Logistic方程来推导Logistic人口模型,过程如下图:
经过上图的推导,我们得到了一般情况下的logistic人口预测模型,为了便于计算,我们将上述模型进行进一步整理得到Logistic模型的基本形式,如下图:
接下来,通过变化将Logistic模型转化为线性模型,过程如下:
然后,再使用matlab进行该线性模型的参数求解及检验,代码如下:
%%人口预测模型
%下面有某地区30年的人口数据,试给出该地区人口增长的数学模型
clear;clc
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=年份-起始年份
T=1:30;
%对数据作线性处理
for i=1:30,
x(i)=exp(-i);
Y(i)=1/y(i);
end
%计算回归系数b
c=zeros(30,1)+1;
X=[c,x'];
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检验值
F=28*U/Q
%计算非线性回归模型的拟合值
for j=1:30,
p(j)=1/(b(1,1)+b(2,1)*exp(-j));
end
%输出非线性回归模型的拟合曲线
plot(T,y)
hold on
plot(T,p,'r-');
关于参数求解与F检验的具体算法在此不再赘述,有兴趣的网友请自行百度。接下来,对上述代码中的一些函数进行简单介绍,想要进一步了解的网友可以查询matlab帮助文档:
exp(t):指数函数e^t;
zeros(m,n):构造m行n列的0矩阵;
inv(A):返回A的逆矩阵;
sum(Y):求和函数,求Y的所有项之和;
plot(x,y,'r-'):以x的值为横坐标,y的值为纵坐标,绘制以“-”代替"."的红色曲线;
最后,运行程序得到F检验值及回归系数的值还有Logistic人口预测模型拟合优度。
版权声明:本站【趣百科】文章素材来源于网络或者用户投稿,未经许可不得用于商用,如转载保留本文链接:https://www.qubaik.com/answer/84979.html