
举个例子
数据: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=[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)
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、完善代码后运行可得如下结果。
如何利用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 计算 Logistic 模型参数并预测未来十年左右的人口数,我们可以使用 fitnlm 函数来拟合 Logistic 函数。首先,需要定义一个 Logistic 函数,然后使用已有的数据来拟合模型。最后,使用模型预测未来的人口数。
以下是完成此任务的 MATLAB 代码:
% 已有数据
x = [2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019];
y = [231733 28417 33883 40085 46679 51265 55882 60944 66185 72856 80077 100260];
% 将 x 转换为列向量
x = x(:);
y = y(:);
% 定义 Logistic 函数
logistic_function = @(b, x) b(1) / (1 + exp(-b(2) (x - b(3))));
% 设置初始参数
initial_parameters = [10000; 02; 2010];
% 拟合模型
mdl = fitnlm(x, y, logistic_function, initial_parameters);
% 预测未来十年的人口数
future_years = (2020:2029)';
predictions = predict(mdl, future_years);
% 输出预测值
disp(predictions)
这段代码首先定义了一个 Logistic 函数,并用给定的初始参数进行拟合。接下来,我们使用 fitnlm 函数拟合模型,并用预测功能预测未来十年的人口数。请注意,这里使用的初始参数仅作为示例,实际情况可能需要调整这些参数以获得更好的拟合结果。
这个代码将输出未来十年的人口预测值。你可以根据需要修改 future_years 变量以预测更多年份的人口数。
给你一个例子,如何用MATLAB解Logistic模型里面的系数,希望对你有帮助。实现代码如下:
t=[。。。];
y=[。。。];
fun=inline('a(1)/(1+exp(a(2)-a(3)t))','a','t');%Logistic模型
b=[0
0
0];%初值
[a,r,J]
=
nlinfit(t,y,fun,b);vpa(a,10);
x1=t;
y1=fun(a,t);
R2=corrcoef(y,
y1)
%R2≈1,可以认为拟合是有效的
[y'
y1']
%显示已知值与拟合值
这是个拟合问题,可这样:
x=[0,1,2,3,4,5,6,7,8,9,10,11,12,13];
y=[239914,22698,2577467,280428,255235,256224,248896,291400,274054,269078,275427,283792,297155,302511];
f=fittype('b/(1+aexp(-kx))');
[fity,g]=fit(x',y',f)
结果是:
fity =
General model:
fity(x) = b/(1+aexp(-kx))
Coefficients (with 95% confidence bounds):
a = -09972
b = 6817
k = 1801
g =
sse: 95318e+07
rsquare: -1496950
dfe: 11
adjrsquare: -1770941
rmse: 29437e+03
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可能是用极大似然法来估计参数的,所以两个软件计算结果可能会不同。
也可能是自己程序编写有误,只能在以后实践中来发现错误了。
以上就是关于求助matlab如何拟合logistic函数模型全部的内容,包括:求助matlab如何拟合logistic函数模型、可以用matlab拟合一下logistic人口预测模型吗,关键是程序和求出的参数。、如何利用matlab构建人口增长的Malthus模型、Logistic模型以及多项式模型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)