【急】用MATLAB软件最小二乘法拟合求解malthus人口增长模型和Logistic模型
malthus人口增长模型:x(t)=x0*exp(rt)
用最小二乘法后,y=rt+a,y=lnx,a=lnx0,求其中的参数r,和x0
Logistic模型:x(t)=xm/[1+(xm/x0-1)exp(-rt)]
用最小二乘法后,dx/dt/x=r-sx,s=r/xm,求其中的参数r,和xm
【具体数据如图】
麻烦高手附上程序,程序运行结果,以及程序结果上的数据如何转换成所要求的参数。
非常非常感谢高手来帮助啊~~~答案完整满意的话还会追加分数的!!但求好的回答!
麻烦最后结果帮我把参数如何代入原先给定的函数,
然后预测2015和2020的人口!!谢谢谢谢!!! 展开
%老兄,坐了几个小时,给出了最小二乘 时间序列两种模型
%最小二乘法求解:
%%
%指数模型
%*********************************************
t=1978:1:2008;
x=[1104 1137 1152 1168 1186 1201 1217 1233 1249 1265 1288 1311 1334 1350 1365 1381 1398 1414 1451 1489 1527 1567 1609 1614 1625 1711 1742 1778 1815 1858 1888];
p=polyfit(t,log(x),1);
r=p(1)
x0=exp(p(2))
x1=x0.*exp(r.*t);
plot(t,x,'r',t,x1,'b') %红色的为原始数据,绿色的为拟合数据
%****************************************************
t1=1:31;
%t1=1978:1:2008;
x=[1104,1137,1152,1168,1186,1201,1217,1233,1249,1265,1288,1311,1334,1350,1365,1381,1398,1414,1451,1489,1527,1567,1609,1614,1625,1711,1742,1778,1815,1858,1888];
plot(t1,x,'-*');
hold on;
%%
%一下用的变量可能与你给出的不一样,请喜酒对应
f2=@(a,t)a(1)./(1+(a(1)./a(2)-1).*exp(-a(3).*t));
ff=optimset;ff.TolFcn=1e-10;ff.TolX=1e-10;
[xx,res]=lsqcurvefit(f2,[.944,.4464,1],t1,x,[],[],ff);
y=f2(xx,t1);
plot(t1,y,':r+')
hold off;
%时间序列模型
clc,clear
global a b k
load logi.txt %原始数据存放在纯文本文件logi.txt 中
yt=1./logi; n=length(yt);m=n/3;
s1=sum(yt(1:m)), s2=sum(yt(m+1:2*m)), s3=sum(yt(2*m+1:end))
b=((s3-s2)/(s2-s1))^(1/m)
a=(s2-s1)*(b-1)/(b*(b^m-1)^2)
k=(s1-a*b*(b^m-1)/(b-1))/m
y=yuce(1:32)
t=1978:1:2009;
plot(t,y,'r');
hold on;
t1=1978:1:2008;
y1=[1104,1137,1152,1168,1186,1201,1217,1233,1249,1265,1288,1311,1334,1350,1365,1381,1398,1414,1451,1489,1527,1567,1609,1614,1625,1711,1742,1778,1815,1858,1888];
plot(t1,y1)
%***************************************************
定义预测函数
function y=yuce(t);
global a b k
y=1./(k+a*b.^t);
%******************************************************
运行结果:
2024-10-13 广告