一个黎曼积分的 Python3 实现

2017-09-11 18:25:39 +08:00
 zakufish
分享一道还算挺有意思的面试题 —— 实现黎曼积分。没有考察性能(所以我用了 Python ),主要是考察我的编程风格和 unit test。Unit test 实在是没时间写了,所以只写了覆盖了两个 exception 的 handle。
地址在这里: https://github.com/zakufish/riemann_sum.py
欢迎评价。
4272 次点击
所在节点    分享创造
22 条回复
hobochen
2017-09-11 19:10:24 +08:00
不就是定积分呗。。
qdwang
2017-09-11 19:28:21 +08:00
🐂
lujiajing1126
2017-09-11 23:33:47 +08:00
这题难道不是考数值方法么- -。

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

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

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

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

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

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

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

看起来你学的是经济类专业,但是还讲物理学中的应用是吗?
tnx2014
2017-09-12 09:15:23 +08:00
楼主牛叉啊,我第一遍学微积分的时候根本云里雾里,楼主在面试时间那么紧的情况下能实现黎曼积分,难怪没毕业就能独当一面。
asdf123101
2017-09-12 09:30:46 +08:00
@zakufish 这个职位面这类题 makes sense。我觉得很不错啦。祝好运🙄
hobochen
2017-09-12 12:57:05 +08:00
感觉 LZ 可以看下自适应辛普森算法。。

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

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

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

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

© 2021 V2EX