求助matlab如何拟合logistic函数模型

求助matlab如何拟合logistic函数模型,第1张

举个例子

数据: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)

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

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

原文地址:https://54852.com/zz/10106983.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存