y=a(1)+a(2)exp(a(3)x)
式中:a(1)=2134928913, a(2)=9416888982, a(3)=00477700364
系数 a,通过lsqcurvefit()函数拟合得到。拟合结果
举个例子
数据:x=[1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000];
y=[39 53 72 96 129 171 232 314 386 502 629 760 920 1065 1232 1317 1507 1793 2040 2265 2514 2814];
用matlab程序logistic人口模型进行拟合
代码
x=[1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000];
y=[39 53 72 96 129 171 232 314 386 502 629 760 920 1065 1232 1317 1507 1793 2040 2265 2514 2814];
x=x';y=y';
st_ = [500 20 02];
cf_ = fit(x,y,ft_ ,'Startpoint',st_)
ft_ = fittype('a/(1+bexp(-k(x-1790)))', 'dependent',{'y'},'independent',{'x'}, 'coefficients',{'a', 'b', 'k'});
cf_ = fit(x,y,ft_ ,'Startpoint',st_)
plot(x,y,'or',x,cf_(x),'-b')
结果
cf_ =
General model:
cf_(x) = a/(1+bexp(-k(x-1790)))
Coefficients (with 95% confidence bounds):
a = 4466 (3711, 522)
b = 5701 (4893, 6509)
k = 002155 (001945, 002365)
Matlab并没有提供现成的函数来进行logistic回归分析。但提供了非线性相关函数,所以想办法编一个函数来进行logistic回归分析。
编写函数:
function yhat = logit(beta,x)
b1 = beta(1);
b2 = beta(2);
yhat=exp(b1+b2x)/(1+exp(b1+b2x)); %为了完成如下函数形式。
调用实例:
clear;
clc;
clg;
ck=[20;60;100;140;180;220;260;300;340;380;420;460;500];
response=[2/90;13/39;30/38;30/35;1;19/20;18/19;13/14;1;1;1;1;1];
beta=[05 05];
betahat = nlinfit(ck,response,@logit,beta);
plot(ck,response,'o');
hold on;
plot(ck,logit(betahat,ck),'r');
不过得注意的是,这里是用least-squares parameter estimates(即最小二乘)来估计参数的,而SPASS可能是用极大似然法来估计参数的,所以两个软件计算结果可能会不同。
也可能是自己程序编写有误,只能在以后实践中来发现错误了。
Logistic人口预测模型是在Malthus模型基础上改进的,该模型考虑有限资源下容纳的最大人口数量Nm。该模型函数表达式为
N(t)=Nm/[1+(Nm/N0-1)exp(-r(t-t0))]
式中:N0=6505,t0=1998
现根据题主提供的数据,利用matlab软件对该方程的系数,用回归分析的方法求出其Nm和r值,实现方法如下:
1、输入数据,即
t=1998:2018;
x=[。。。。。。];
2、定义函数,fun=@(a,t)a(1)/(1+(a(1)/6502-1)exp(a(2)(t-1998)));
3、使用lsqcurvefit函数,求得系数Nm{fun函数中的a(1)},r{fun函数中的a(2)},即
a=lsqcurvefit(fun,a0,t,x) 其中:a0为初值
4、使用拟合后fun函数,得到拟合后的N(t)值
5、使用plot函数绘出拟合前与拟合后的对比图形
6、完善代码后运行可得如下结果。
Logistic模型:a/(1+(a/b-1)exp(-kt))
实现代码:
clc,clear all,close all
%Logistic模型用matlab求解
%时间是2000年到2010年
%数据是Q=[50302 52602 56196 6292 70021 78815 87676 98923 105823 113513 1330]
%要预测2015年的用水量。
t=[1:11];
Q=[50302 52602 56196 6292 70021 78815 87676 98923 105823 113513 1330];
func=inline('a(1)/(1+(a(1)/a(2)-1)exp(-a(3)t))','a','t');
b=[01576 09706 09572]
a=lsqcurvefit(func,b,t,Q);
Q1=func(a,t);
y=Q';y1=Q';
WZ=['Q=',num2str(a(1)),'/(1+(',num2str(a(1)),'/',num2str(a(2)),'-1)','exp(-',num2str(a(3)),'t)'];
figure
tt=2000:2010;
xx=min(t):1:max(t);
yy=func(a,xx);
plot(tt,Q,'rp'),hold on
plot(tt,yy,'-'),xlabel('年份'),ylabel('用水量(万吨)'),hold off %,grid on
text(2000,1300,WZ,'FontSize',10);
t0=2015-2000+1;y0=func(a,t0);
text(2000,1200,['预测2015年的用水量:',num2str(max(y0)),'(万吨)'])
运行结果
预测2015年的用水量:1972万吨
如何利用matlab构建人口增长的Malthus模型、Logistic模型以及多项式模型?
第一步,分别自定义模型函数,如
Malthus模型:
func=@(a,t)N0exp(a(t-t0))
Logistic模型:
func=@(a,t)a(1)/(1+(a(1)/N0-1)exp(-a(2)(t-t0)))
多项式模型:
func=@(a,t)a(1)+a(2)(t-t0)+a(3)(t-t0)^2
第二步,利用1790-1880年的数据,分别使用lsqcurvefit函数或nlinfit函数,求出系数a
第三步,预测1890-1980年的人口数,即
y=func(a,t)
第四步,使用plot函数绘制,美国人口数的统计数据与各预测模型曲线对比图
第五步,或使用table函数列表显示,对比数据
第六步,预测后100年的人口数,并与实际数据相比较,从图形或表格中,可以看到预测精度多项式模型优于Logistic模型,Malthus模型效果最差。
以上就是关于Matlab解求Logistics人口模型方程全部的内容,包括:Matlab解求Logistics人口模型方程、求助matlab如何拟合logistic函数模型、怎样用matlab实现logistic方程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)