这段代码执行了如下操作:0 y1 h" I! l: w8 M9 M. c+ a
* b1 r" i! {% A
1.导入模块:* n; Q4 W# ]9 o# E% m2 R# S) \
! v# v2 L: h4 c! S- Q* H
import numpy as np" m; f& L j8 I2 g" t
import pandas as pd8 i5 x" k5 Y) }$ a* Y: H: f' K. w
from scipy.optimize import curve_fit9 X5 W. c, L! V# t
$ @8 o. X B0 y9 I3 c g# t - B* L) ~- W: E" ?* z. j: A) u E2.导入了 NumPy、Pandas 和 SciPy 中的 curve_fit 函数。 , B# Q4 T. U: }# g X# B1 ] 6 a- o* J+ ], J3 B: E: U8 T+ s0 i4 Y. W( l A- s9 u# J5 @# k
3.准备数据: o8 F0 U9 K& |6 y! `9 O6 L, `
, Q# o- R, ?! a# V' h2 q+ l
df = pd.DataFrame({1 v$ j- Z- x3 M& q, b, I$ s
'year': [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870], D1 j; n, L8 @0 u% O" ? 'population': [3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6]," o8 [; V& z8 C9 v+ V
})6 \+ O |$ F/ G5 m0 z' ~5 F/ G$ @
x0 = float(df['population'][0]) 3 M0 }3 @0 _% P2 k5 o6 v t0 = float(df['year'][0]) / |9 `9 i0 |3 b" m9 |$ b 2 |% z+ @! f: H$ Q9 f1 i8 { , X! T+ m# I2 D5 P/ ?4.创建了一个 Pandas DataFrame 来存储年份和人口数据。 9 g4 g1 l% o" _( l7 y5.提取了初始年份和初始人口数。 ! t8 ?6 g' Y8 T Z, L0 m# y7 C
3 J, Q& N2 h. x; G6 t& t
6.定义 Logistic 模型函数:6 _! W, {7 S; {% F* ]) _ D p: {
0 Q. {! O$ {* ~6 z+ \
def x(t, r, xm):9 r/ y9 _. f4 w% Z
return xm / (1 + (xm/x0-1)*np.exp(-r*(t-t0))) + M7 ?& e+ x1 C' d- a! _% w2 f 6 }% q- H" X7 K8 Y' f + n7 D+ b9 c! p1 r7.定义了 Logistic 函数,该函数接受时间 t、增长率 r 和最大人口数 xm 作为参数,并返回人口数。 ) B. P6 v! _7 T6 r0 J x; S* p% V- ^, d2 _1 P2 C
. t9 R q& p7 W- n1 h8.拟合参数: 1 g ^% a& @- Y* L; o( L( E ! M: t1 T1 T# h3 i. b% C. { popt, pcov = curve_fit(x, df['year'], df['population'], bounds=((0, 1), (.1, np.inf)))+ h8 [# l( \; d+ H7 T% S0 ^5 C6 O ? P! K
r, xm = popt[0], popt[1] 4 c7 A% f: F% h+ _4 L9 \% h+ @, K { ?5 @/ O/ `* K 9 J: o2 P, v; h1 M5 }8 R9.使用 curve_fit 函数拟合了 Logistic 函数的参数 r 和 xm,以最小化实际人口数据与 Logistic 模型的拟合误差。 P7 R1 j5 [# L$ U; R3 U
8 Y; x3 }7 L/ A1 e u " p+ {" |) [7 y$ o# M10.预测 1900 年人口: 3 e) i$ `. B* [' ^9 Z 6 x/ ~, F# M" \- O [% N print('population in 1900 =', x(1900, r, xm)) 3 x1 V" A- |$ A* p- t* g u( G' ^, a3 I- i ]6 ? . @; z/ _2 d' q11.使用拟合的参数预测了 1900 年的人口数。 ; H9 l6 R6 S# w' Z8 p6 n( q' }% w5 U: T/ V9 A
: n2 @ e& h: b; {3 h( ^8 G. x12.绘制预测曲线: $ `0 h6 U7 L6 J% w% P. x( p" c% ^) I* I: C( J( t) e
year = np.linspace(1790, 2000, 21)4 n d5 E! s. s) l, J2 I
population = [x(each, r, xm) for each in year]/ ]6 Y9 z1 Q" ^/ p( T3 j3 P1 X7 U
plt.scatter(df['year'], df['population'], label='actual')0 o q' f) c% W! h
plt.plot(year, population, label='predict', color='coral') 3 W+ p& O) k6 {9 i' w2 r1 J plt.legend()3 d5 b8 S/ V, S+ s& }& g- L
7 B# X Q: Q: T & P4 \; ~) B X8 |8 d: M13.创建了一个时间范围 year,并使用拟合的参数计算了对应的人口数。 ; f. n/ q; {+ {/ G2 j4 y7 i4 d, L14.使用 Matplotlib 绘制了实际人口数据的散点图和 Logistic 模型的预测曲线,并添加了图例。% _* P; P3 I' U% M3 p1 Z1 y4 L! E
- j7 h; `) m8 H/ ^( c
这段代码的核心是使用 Logistic 模型拟合了给定的人口数据,并利用拟合的参数进行了未来人口的预测。 $ ^# @+ `) W/ H7 l! r " c/ f* q/ t( e6 c$ L; l. D 3 }( H: a; x4 [# d: }