logistic python实现,基于logistic模型

  logistic python实现,基于logistic模型

  第一篇logistic增长模型1.1 J增长与S增长1.2 logistic增长函数1.3案例代码2拟合多项式函数2.1多项式拟合—— polyfit拟合年龄2.2多项式拟合——曲线_拟合拟合多项式2.3曲线_拟合拟合dddgb分布

  1逻辑斯蒂增长模型1.1 J增长和s增长

  指数增长,J型曲线:指数增长,即增长是不受控制的,爆发性的。

  比如一个人可以感染三个人,三个人可以感染九个人,九个人可以感染27个人,这样不停的繁殖。这就是J型增长,也叫指数增长。

  有些传染病在初期可能会呈指数增长。

  但是,在实际的增长过程中,增长率不可能一直保持不变。随着人数的增加,增长速度会逐渐受到抑制。这就是S型增长。

  一般疾病的传播是一个S型增长的过程,因为疾病传播的过程中会有一些阻力。

  1.2 logistic增长函数当一个物种移入一个新的生态系统时,其数量会发生变化。假设这个物种的初始数量小于环境的最大容量,这个数量就会增加。这个物种在这个生态系统中有天敌、食物、空间等资源,资源也是不足的(非理想环境)。然后生长函数满足logistic方程,图像是S形的。这个方程是描述资源有限条件下人口增长规律的最佳数学模型。在接下来的内容中,将详细介绍logistic方程的原理、生态学意义和应用。逻辑lmddd模型的微分公式为:dx/dt=rx(1-x)其中R为速率参数。

  k是环境容量,也就是P(t)增长到尽头所能达到的极限。P0为初始容量,即t=0时的矩数。r是增长率。R越大,增长越快,越快接近K值。R越小,增长越慢,接近K值越慢。

  公式用python写成函数形式:def logistic _ increase _ function(t,k,P0,R):# t:time 0:initial timpo:initial _ value k:capacity R:increase _ rate exp _ value=NP . exp(R *(t-t0))return(k * exp _ value * P0)/(k(exp _ value-1)* P0)logistic下图为曲线个数,右图为增长率。

  1.3 案例代码#!/usr/坦率的舞蹈/python# -*-编码:UTF-8 -*- 拟合2019-nCov肺炎感染确诊人数 import numpy as NP import matplotlib。py plot as pltimport math import pandas as PD import numpy as NP import matplotlib。作为来自scipy的PLT的py图。优化导入曲线_ fitdef logistic _ increase _ function(t,K,P0,r): t,list,日期序列,[11,18,19,20,21,22,23,24,25,26,27] t0,int日期首日r,浮点,r为增长速率,r越大则增长越快,越快逼近K值-越陡峭;r越小增长越慢,越慢逼近K值p0蛋白为初始容量,就是t=0时刻的数量k,浮动,K为环境容量,即增长到最后,P(t)能达到的极限,一般为1 t0=11 #第一天r=0.6 # r=0.55 # t:时间t0:初始时间P0:初始值k:容量r:increase _ rate exp _ value=NP。exp(r *(t-t0))return(K * exp _ value * P0)/(K(exp _ value-1)* P0)" 1.11日41例1.18日45例1.19日62例1.20日291例1.21日440例1.22日571例1.23日830例1.24日1287例1.25日1975例1.26日2744例1.27日4515例# 日期及感染人数t=[11,18,19,20,21,22,23,24,25,26,27]t=np.array(t)P=[41,45,62,291,440,571,830,1287,1975,2744,4515]P=np.array(P) #用最sxdbl乘法估计拟合popt,pcov=curve _ fit(logistic _ increase _ function,t,P)# popt - K,P0,r#最终K=4.01665705e 10人会被感染# array([7.86278276e 03,2.96673434e-01,1.00000000e 00])#获取输出端口里面是拟合系数打印( K:容量P0:初始值r:增加率t:时间)打印(popt)#拟合后预测的P值p _ predict=logistic _ increase _ function(t,popt[0],popt[1],popt[2])#未来预测future=[11,18,19,20,21,22,23,24,25,26,27,28,29,30,31,41,51,61,71,81,91,101]future=NP。array(future)future _ predict=logistic _ increase _ function(future,popt[0],popt[1],popt[2])#近期情况预测明天=[28,29,30,32,33,35,37,40]明天=NP。array(tomorrow)tomorrow _ predict=logistic _ increase _ function(tomorrow,popt[0],popt[1],popt[2]) #绘图plot1=plt.plot(t,P, s ,label=已确认感染人数)plot2=plt.plot(t,P_predict, r ,label=预测感染人数)plot3=plt.plot(tomorrow,tomorrow_predict,s ,label=预测感染人数)plt.xlabel(time)plt.ylabel(确认感染人数)plt.legend(loc=0) #指定神话;传奇的位置右下角print(logistic _ increase _ function(NP。array(28),popt[0],popt[1],popt[2]))print(logistic _ increase _ function(NP。array(29),popt[0],popt[1],popt[2]))plt.show() #未来预测绘图#plot2=plt.plot(t,P_predict, r ,label=多边形拟合值)# plot 3=PLT。plot(future,future_predict, r ,label=多边形拟合值)# PLT。显示()打印(程序完成! )# 拟合年龄 import numpy as NP import matplotlib。py绘图为PLT #定义x、y散点坐标x=[10,20,30,40,50,60,70,80]x=np.array(x)print(x is :\n ,x)num=[174,236,305,334,349,351,342,323]y=NP。array(num)print( y is:\ n ,y)#用3次多项式拟合f1=np.polyfit(x,y,3)print(f1 is :\n ,f1)P1=NP。poly 1d(f1)print( P1是:\ n ,p1)#也可使用yvals=np.polyval(f1,x)yvals=p1(x)print(yvals is :\n ,yvals)#绘图plot1=plt.plot(x,y, s ,label=原始值)plot2=plt.plot(x,yvals, r ,label=polyfit值)PLT。xlabel( x )工厂。ylabel( y )PLT。图例(位置=4)#指定神话;传奇的位置右下角PLT。标题(“多边形拟合”)PLT。显示()用最sxdbl乘法进行拟合,最sxdbl乘法,对符号逻辑的增长函数进行拟合。

  logistic_increase_function(t,K,P0,r)中的r取值是可以调整的:

  人为干预后,疾病降低K值,因此可以将r值提升,以加快达到K值的速度

  (r变大,曲线变陡峭)

  r取0.55

  r=0.65

  2拟合多项式函数参考:python对于任意数据和曲线进行拟合并求出函数表达式的三种方案。

  2.1 多项式拟合—— polyfit拟合年龄将数组作为npimport matplotlib.pyplot作为工厂编号定义x、y散点坐标x=[10,20,30,40,50,60,70,80]x=np.array(x)print(x is :\n ,x)num=[174,236,305,334,349,351,342,323]y=NP。array(num)print( y is:\ n ,y)#用3次多项式拟合f1=np.polyfit(x,y,3)print(f1 is :\n ,f1)P1=NP。poly 1d(f1)print( P1是:\ n ,p1) #也可使用yvals=np.polyval(f1,x)yvals=p1(x) #拟合y值print(yvals is :\n ,yvals)#绘图plot1=plt.plot(x,y, s ,label=原始值)plot2=plt.plot(x,yvals, r ,label=polyfit值)PLT。xlabel( x )工厂。ylabel( y )PLT。图例(位置=4)#指定神话;传奇的位置右下角PLT。标题(“多边形拟合”)PLT。显示()

  2.2 多项式拟合——曲线拟合拟合多项式将数组作为npimport matplotlib.pyplot作为照片来自scipy。优化导入曲线拟合#自定义函数e指数形式def func(x,a,b,c):返回a * NP。sqrt(x)*(b * NP。正方形(x)c)#定义x、y散点坐标x=[20,30,40,50,60,70]x=np.array(x)num=[453,482,503,508,498,479]y=np.array(num) #非线性最sxdbl乘法拟合popt,pcov=曲线拟合(函数,x,y)#获取输出端口里面是拟合系数print(popt)a=popt[0]b=popt[1]c=popt[2]y vals=func(x,a,b,c) #拟合y值print(popt:,popt)print(系数答:,答)打印(系数乙:,乙)打印(系数c:,c)打印(系数pcov:“,pcov)打印(系数伊瓦尔斯:,伊瓦尔斯)#绘图plot1=plt.plot(x,y, s ,label=原始值)plot2=plt.plot(x,yvals, r ,label=polyfit值)PLT。xlabel( x )工厂。ylabel( y )PLT。图例(位置=4)#指定神话;传奇的位置右下角plt.title(curve_fit)plt.show()

  2.3曲线拟合拟合dddgb分布# encoding=utf-8导入numpy作为NP导入matplotlib。作为来自scipy的PLT的py图。优化导入曲线_拟合将熊猫导入为PD #自定义函数e指数形式def func(x,a,u,sig):返回a *(NP。exp(-(x-u)* * 2/(2 * SIG * * 2))/(数学。sqrt(2 *数学。pi)* SIG))*(431(4750/x))#定义x、y散点坐标x=[40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135]x=NP。array(x)# x=NP。array(range(20))print( x is:\ n ,x)num=[536,529,522,516,511获取输出端口里面是拟合系数a=popt[0]u=popt[1]SIG=popt[2]y vals=func(x,a,u,sig) #拟合y值打印(u 系数答:,答)打印(u 系数u:,u)打印(u 系数签名:,签名)#绘图plot1=plt.plot(x,y, s ,label=原始值)plot2=plt.plot(x,yvals, r ,label=polyfit值)PLT。xlabel( x )工厂。ylabel( y )PLT。图例(位置=4)#指定神话;传奇的位置右下角plt.title(curve_fit)plt.show()

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: