推荐学习书目
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 · Aug 28, 2018 · 3348 views
    This topic created in 2815 days ago, the information mentioned may be changed or developed.

    题目背景

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

    于是原来问题等价于总人口为 p0+aug/percent 的两个城市 AB,多久能增长到 p+aug/percent
    frmongo
        8
    frmongo  
    OP
       Aug 29, 2018
    @Xs0ul 不能这么算吧,A 城市算是利滚利,aug 是定值。
    f4nyc
        9
    f4nyc  
       Aug 29, 2018 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  
       Aug 29, 2018
    复利计算
    frmongo
        11
    frmongo  
    OP
       Aug 29, 2018
    @f4nyc 确实是
    frmongo
        12
    frmongo  
    OP
       Aug 29, 2018
    有始有终,我记录了下过程
    Xs0ul
        13
    Xs0ul  
       Aug 29, 2018
    @frmongo #12 B 每年新增的都变成 aug 到 A 里了,所以 B 人口是不变的,每年的 aug 也不变
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3840 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 61ms · UTC 10:25 · PVG 18:25 · LAX 03:25 · JFK 06:25
    ♥ Do have faith in what you're doing.