V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
zakufish
V2EX  ›  分享创造

一个黎曼积分的 Python3 实现

  •  
  •   zakufish · 2017-09-11 18:25:39 +08:00 · 4409 次点击
    这是一个创建于 2616 天前的主题,其中的信息可能已经有所发展或是发生改变。
    分享一道还算挺有意思的面试题 —— 实现黎曼积分。没有考察性能(所以我用了 Python ),主要是考察我的编程风格和 unit test。Unit test 实在是没时间写了,所以只写了覆盖了两个 exception 的 handle。
    地址在这里: https://github.com/zakufish/riemann_sum.py
    欢迎评价。
    22 条回复    2017-09-12 14:06:34 +08:00
    hobochen
        1
    hobochen  
       2017-09-11 19:10:24 +08:00 via iPhone
    不就是定积分呗。。
    qdwang
        2
    qdwang  
       2017-09-11 19:28:21 +08:00 via iPhone
    🐂
    lujiajing1126
        3
    lujiajing1126  
       2017-09-11 23:33:47 +08:00
    这题难道不是考数值方法么- -。

    虽然楼主代码写的看着还可以。
    zakufish
        4
    zakufish  
    OP
       2017-09-12 00:49:05 +08:00 via iPhone
    @lujiajing1126 可能考点确实是那个?不过考官说主要看我的设计能力,编程风格,注释,还有 edge case 能不能 test 到这些
    zakufish
        5
    zakufish  
    OP
       2017-09-12 00:49:52 +08:00 via iPhone   ❤️ 1
    @hobochen 这玩意儿叫定积分么?
    我在国外上的中学,我们就管这个叫 Riemann Integration ಠ_ಠ
    tnx2014
        6
    tnx2014  
       2017-09-12 00:54:12 +08:00
    Riemann Integration 是积分的一种,中文叫做黎曼积分,黎曼积分是最常见的积分类型。
    tnx2014
        7
    tnx2014  
       2017-09-12 00:58:56 +08:00   ❤️ 1
    通常情况下的定积分都是指黎曼积分,也叫黎曼和,函数(某区间上)可积,也是指某个区间上有定积分。
    RqPS6rhmP3Nyn3Tm
        8
    RqPS6rhmP3Nyn3Tm  
       2017-09-12 04:08:58 +08:00 via iPhone
    高中就教黎曼积分?在我校是大一的 Caculus II
    geelaw
        9
    geelaw  
       2017-09-12 04:24:01 +08:00
    一般来说“定积分”就是黎曼积分,勒贝格积分喜欢叫“积分”。

    这代码,过度抽象 + 算法很普通。

    用的是 Riemann 和,但是 MaxRiemannSum、MinRiemannSum 都不是本意,因为函数的最值不一定在区间一侧。

    最后,“非法”一般是 invalid,而不是 illegal。
    eccstartup
        10
    eccstartup  
       2017-09-12 06:39:50 +08:00
    黎曼积分先判存在与否 再求值
    geelaw
        11
    geelaw  
       2017-09-12 07:14:25 +08:00
    @eccstartup 判断一般函数(用图灵机描述)的 Riemann 积分是否存在是一个不可判定问题。
    asdf123101
        12
    asdf123101  
       2017-09-12 07:25:20 +08:00 via Android
    本科数值计算的基本题?我觉得有点读解读(抽象?)了。不过面试的时候能写成这样很不错啦。
    zakufish
        13
    zakufish  
    OP
       2017-09-12 08:24:57 +08:00 via iPhone
    @BXIA 我不是美国的哈哈。我们 integration 分两块上的,Riemann Integration (包括 Tropedial Value )都是 Year 11 的课程,Year 12 去上剩下的 integration 的内容,然后还有一个章节叫 the application of physical world,专门做微积分的实际应用啥的(比如小球在一个倒立的平滑圆锥体里面转啊转然后问你一个题)
    zakufish
        14
    zakufish  
    OP
       2017-09-12 08:33:00 +08:00 via iPhone
    @geelaw 感谢评论。是的,过度抽象了,Max,Min 应当是找到那一个 partition 的 maximum value,不过我当时能想到的算法,就是判定趋势 /求导,加上面试时间不是很够,就算了。
    回头可以研究一下解决这个问题的算法,感觉还是挺有意思的。

    Exception 的话 illegal 用的也很多,比如 java.lang.IllegalArgumentException。
    zakufish
        15
    zakufish  
    OP
       2017-09-12 08:38:27 +08:00 via iPhone
    @asdf123101 哈哈,的确是本科的面试题。是一家基金的 Quantitative Developer 的岗位。
    当时面试官跟我说的是“看看你的设计能力”之类的话,所以我写的时候考虑到了很多将来 scalability 的问题,想把每一个部件都写成可替换的,自己刚开始也没意识到可能过度抽象这个问题。

    面试官还没给回复,不过估计最后的 feedback 也是这个吧
    Xs0ul
        16
    Xs0ul  
       2017-09-12 08:54:22 +08:00
    要怎么在代码层面检验是否黎曼可积呢?像狄利克雷函数这样的,我都不知道怎么样在 python 里实现(
    tnx2014
        17
    tnx2014  
       2017-09-12 09:09:20 +08:00
    @zakufish k12 的标准的话,Year 11 不是高二?你们什么学校,如果在美国的话一般只有大学预科( AP )课程里才能遇到吧,除非是私立学校,或者公立中学中专修数学或与数学相关程度比较高的学科的学生才能接触到)

    内地虽然大部分地区都加了微积分内容,但都是比较具体计算题上都是比较浅的,一般在高三才有(虽然很多学校可能高二就学完了高三内容,但那只是为了早些进入第一轮复习赶进度)。

    看起来你学的是经济类专业,但是还讲物理学中的应用是吗?
    tnx2014
        18
    tnx2014  
       2017-09-12 09:15:23 +08:00
    楼主牛叉啊,我第一遍学微积分的时候根本云里雾里,楼主在面试时间那么紧的情况下能实现黎曼积分,难怪没毕业就能独当一面。
    asdf123101
        19
    asdf123101  
       2017-09-12 09:30:46 +08:00 via Android
    @zakufish 这个职位面这类题 makes sense。我觉得很不错啦。祝好运🙄
    hobochen
        20
    hobochen  
       2017-09-12 12:57:05 +08:00 via iPhone
    感觉 LZ 可以看下自适应辛普森算法。。
    zakufish
        21
    zakufish  
    OP
       2017-09-12 14:06:08 +08:00   ❤️ 1
    @tnx2014 我不是在美国。小时候和家人移居到南半球一个地广人稀的英语国家……
    上的是很普通的公立学校,不过我们数学分四个等级,我上的是最高的那个。除了英文,数学,我还学了物理和工程学(教你一些基本的工程数学,涵盖一些土木,机械,材料的内容,然后要你做好几个 project,我那一届是承重桥和千斤顶之类的)没选经济,要背的东西太多了。数学课本身有一个章节就叫物理应用,其实和物理关系很小,基本就是用微积分来分析物理现象。

    我最早大学学的是数学专业,不过一个学期以后就转计算机了(快速意识到了自己不是这一块的料)。
    zakufish
        22
    zakufish  
    OP
       2017-09-12 14:06:34 +08:00
    @hobochen 刚刚看了下,果然用这个的话好得多……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2787 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:09 · PVG 08:09 · LAX 16:09 · JFK 19:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.