QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2304|回复: 0
打印 上一主题 下一主题

使用 Logistic 模型拟合人口数据

[复制链接]
字体大小: 正常 放大

1198

主题

4

听众

2978

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码执行了如下操作:
8 l% @$ W9 H* `) l1 c! V
2 k2 P4 z+ k5 D  N; |$ X1.导入模块:
5 N0 H2 d- Y  w3 q2 B/ `) Q. _7 y  k2 G, Y) @* Z7 R$ t
   import numpy as np
7 L9 g( O, y0 z3 j   import pandas as pd3 x2 C5 t; N& P2 q8 E" D, B
   from scipy.optimize import curve_fit) w# U- v! j+ w* y. |

; h9 ~: b( f" v. w1 B5 G) l* z% s8 I+ g: }4 L6 S; ~4 W
2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。9 g" |& R" A9 x2 g" L1 x( T
5 l0 B. Q; M6 R2 c

$ x, ]9 s5 p# M) i0 v  K7 X3.准备数据:6 L+ E- A3 K( s% k/ X8 z7 A

6 K+ z0 D: _9 `4 K   df = pd.DataFrame({
) v9 U2 ~% s" p) p, G" J; Z       'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870],) B& K, U" d+ a
       'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6],
4 l+ R) s5 T3 y5 j* h- A# \   })0 h8 \9 z4 T$ R! ]
   x0 = float(df['population'][0])8 I/ d- F; v0 b' d; d
   t0 = float(df['year'][0])
8 z7 z& E9 o4 `6 e! g8 R% ]( x5 y9 i
- n$ a, |! x" }
; B+ w5 `* W8 w0 k4.创建了一个 Pandas DataFrame 来存储年份和人口数据。7 y. o+ q* h( g/ {2 i" F
5.提取了初始年份和初始人口数。) g7 q5 Y- {( s# }

4 E0 q7 U; h6 g
3 M' q. A1 K4 x! F6.定义 Logistic 模型函数:
# `* h, s7 _3 S0 T
: b3 w$ h$ r4 `$ e" @   def x(t, r, xm):
$ C# U: j* n- E       return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0)))
  |+ I5 D7 a9 @/ _3 A" u/ L0 T! N8 f; E, }# R" u8 p

5 V( s. F- s2 F6 |7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。. B3 G) c1 s5 N! I: W" M' i, u" E

' d! p/ T) S! N: @& O: @: P, k2 f! V/ I7 R" d+ \; X" S
8.拟合参数:! C1 E6 b( y8 J; M
6 B6 R% u$ a  h+ l2 C3 b
   popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))
6 d; z! z" J3 z$ c8 s5 [* l. t   r, xm = popt[0], popt[1]
. R( j" a* k6 P# P
8 ?. F' C8 Q$ G5 o. w0 \! ^: y2 |7 ]$ U) ?2 E" L' x
9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。
% ?9 {4 T7 N, E9 r- f" t
9 B" M$ t: E2 a
7 i7 O9 S7 m" J. A10.预测 1900 年人口:, y  `' W2 G0 x. _% i/ n  P
6 |& Y1 X5 A$ U. U
   print('population in 1900 =', x(1900, r, xm))4 e$ O8 t, G5 U  p* J9 E$ A5 N
+ m6 m1 `6 K# ]$ u8 b" x& E+ E

, w, K: ?1 R1 f6 c* N# n11.使用拟合的参数预测了 1900 年的人口数。$ G8 p' X8 ?" e$ o1 x
/ S# j& K7 A; T  s" \& l
2 f4 n, ^9 z: e+ G; R6 M
12.绘制预测曲线:' R, Z( r' W9 V5 I

6 Y* F2 `% _5 m( }. `   year = np.linspace(1790, 2000, 21)  W/ k" F& ]& l) Y9 M; x; b
   population = [x(each, r, xm) for each in year]7 A. e2 }% E% H: x" C$ E
   plt.scatter(df['year'], df['population'], label='actual')+ o& a/ z: }7 k7 c) a
   plt.plot(year, population, label='predict', color='coral')9 Q0 ]. m4 S' _3 U9 v3 s
   plt.legend()" r0 c0 k& ~5 Q& Z/ k& ~3 U. Y
2 D' F) f9 T* l6 q3 N: e
4 S( q  E5 f* C6 x$ i! m
13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。
, H& k2 w2 W6 v" E14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。
! q9 |) B  N. p/ d* L
1 N3 N' J. Y# U% I- r7 r这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。
) _$ M' [" p- o5 z3 y1 {$ n9 ^; ?4 }/ m6 V& ^1 F$ k, K8 A* b
& l) D' x. D! f  `& n$ M7 I" m: e' X

13.logistic_model.py

1.13 KB, 下载次数: 0, 下载积分: 体力 -2 点

售价: 2 点体力  [记录]  [购买]

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-10-16 08:11 , Processed in 0.330302 second(s), 55 queries .

回顶部