Matlab解求Logistics人口模型方程

Matlab解求Logistics人口模型方程,第1张

Logistics人口模型方程

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方程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9762818.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存