求一个人口增长问题

2018-08-28 22:21:18 +08:00
 frmongo

题目背景

某市人口 p0,每年自身人口增长 percent % 。每年固定的,外来移民人数有 aug 人,
问哪一年人数可以大于等于 p

看到一个哥们的实现如下

from math import ceil, log
def nb_year(p0, percent, aug, p):
    percent = 1 + percent / 100.
    r = aug / (1 - percent)
    return ceil(log((p - r) / (p0 - r), percent))

有人看出来是,这是什么原理吗

2712 次点击
所在节点    Python
13 条回复
frmongo
2018-08-28 22:22:27 +08:00
测试 print(nb_year(1500000, 2.5, 10000, 2000000)) 答案 10,算法没问题,我没看懂
frmongo
2018-08-28 22:28:57 +08:00
看来得泛泛高数书了,数列问题
Xs0ul
2018-08-28 22:40:56 +08:00
无自然增长,也就是 percent=0 的时候会出错的(
justou
2018-08-28 22:58:54 +08:00
假设每年人口增长率为 r
1 年后, 总人口 = p0(1+r) + aug
2 年后, 总人口 = [p0(1+r) + aug](1+r) + aug = p0(1+r)^2 + aug(1+r) + aug
...
n 后年, 总人口 = p0(1+r)^n + aug(1+r)^(n-1) + ... + aug(1+r) + aug
根据题设, 模型是这样的么?
lizon
2018-08-28 23:43:29 +08:00
zcjfesky
2018-08-28 23:43:35 +08:00
你这个不是可以数学方法求解的吗… 设第 n 年人口数为 pop(n),则{pop(n)+aug/percent}为以 1+percent 为公比的等比数列
Xs0ul
2018-08-29 00:07:34 +08:00
给个直观解释:想象外来移民全来自于另一个城市 B,B 人口增长率和题目里的城市 A 一致,并且每年增长的人数全移民到 A。所以 B 的人口是 aug/percent

于是原来问题等价于总人口为 p0+aug/percent 的两个城市 AB,多久能增长到 p+aug/percent
frmongo
2018-08-29 10:43:18 +08:00
@Xs0ul 不能这么算吧,A 城市算是利滚利,aug 是定值。
f4nyc
2018-08-29 12:31:10 +08:00
恕我直言,这是中学数学……
四楼的模型是正确的,p0(1+r)^n + aug(1+r)^(n-1) + ... + aug(1+r) + aug=p0(1+r)^n+aug((1+r)^n - 1)/r > p
(1+r)^n>(p+aug/r)/(p0+aug/r)
当然这个代码也有点脱裤子放屁
ddzzhen
2018-08-29 16:02:46 +08:00
复利计算
frmongo
2018-08-29 16:48:59 +08:00
@f4nyc 确实是
frmongo
2018-08-29 18:52:55 +08:00
有始有终,我记录了下过程
Xs0ul
2018-08-29 21:17:39 +08:00
@frmongo #12 B 每年新增的都变成 aug 到 A 里了,所以 B 人口是不变的,每年的 aug 也不变

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/484085

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX