V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
frmongo
V2EX  ›  Python

求一个人口增长问题

  •  
  •   frmongo · 2018-08-28 22:21:18 +08:00 · 2791 次点击
    这是一个创建于 2264 天前的主题,其中的信息可能已经有所发展或是发生改变。

    题目背景

    某市人口 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))
    

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

    13 条回复    2018-08-29 21:17:39 +08:00
    frmongo
        1
    frmongo  
    OP
       2018-08-28 22:22:27 +08:00
    测试 print(nb_year(1500000, 2.5, 10000, 2000000)) 答案 10,算法没问题,我没看懂
    frmongo
        2
    frmongo  
    OP
       2018-08-28 22:28:57 +08:00
    看来得泛泛高数书了,数列问题
    Xs0ul
        3
    Xs0ul  
       2018-08-28 22:40:56 +08:00
    无自然增长,也就是 percent=0 的时候会出错的(
    justou
        4
    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
        5
    lizon  
       2018-08-28 23:43:29 +08:00
    zcjfesky
        6
    zcjfesky  
       2018-08-28 23:43:35 +08:00 via Android
    你这个不是可以数学方法求解的吗… 设第 n 年人口数为 pop(n),则{pop(n)+aug/percent}为以 1+percent 为公比的等比数列
    Xs0ul
        7
    Xs0ul  
       2018-08-29 00:07:34 +08:00
    给个直观解释:想象外来移民全来自于另一个城市 B,B 人口增长率和题目里的城市 A 一致,并且每年增长的人数全移民到 A。所以 B 的人口是 aug/percent

    于是原来问题等价于总人口为 p0+aug/percent 的两个城市 AB,多久能增长到 p+aug/percent
    frmongo
        8
    frmongo  
    OP
       2018-08-29 10:43:18 +08:00
    @Xs0ul 不能这么算吧,A 城市算是利滚利,aug 是定值。
    f4nyc
        9
    f4nyc  
       2018-08-29 12:31:10 +08:00 via iPhone
    恕我直言,这是中学数学……
    四楼的模型是正确的,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
        10
    ddzzhen  
       2018-08-29 16:02:46 +08:00
    复利计算
    frmongo
        11
    frmongo  
    OP
       2018-08-29 16:48:59 +08:00
    @f4nyc 确实是
    frmongo
        12
    frmongo  
    OP
       2018-08-29 18:52:55 +08:00
    有始有终,我记录了下过程
    Xs0ul
        13
    Xs0ul  
       2018-08-29 21:17:39 +08:00
    @frmongo #12 B 每年新增的都变成 aug 到 A 里了,所以 B 人口是不变的,每年的 aug 也不变
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2534 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:31 · PVG 09:31 · LAX 17:31 · JFK 20:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.