这学期的数学建模课,对笔者来说,基本上就是一个锻炼论文写作和Python技能的过程。不过是写论文还是写博客,我都致力于写出符合自己审美观的作品,因此我才会选择$\LaTeX$,我才会选择Python。$\LaTeX$写出来的科学论文是公认的标准而好看的格式,而Python,的确可以作出漂亮的图,也可以简洁地完成所需要的数值计算。我越来越发现,在数学建模、写作方面,除了必不可少的符号推导部分(这部分只能用Mathematica),我已经离不开Python了。
为什么还要求漂亮?内容好不就行了吗?的确,内容才是主要的,但是如果能把展示效果美化一下,而且又不耗费更多的功夫,那么何乐而不为呢?
迟到一年的建模:再探碎纸复原
By 苏剑林 | 2014-12-18 | 83267位读者 | 引用前言:一年前国赛的时候,很初级地做了一下B题,做完之后还写了个《碎纸复原:一个人的数学建模》。当时就是对题目很有兴趣,然后通过一天的学习,基本完成了附件一二的代码,对附件三也只是有个概念。而今年我们上的数学建模课,老师把这道题作为大作业让我们做,于是我便再拾起了一年前的那份激情,继续那未完成的一个人的数学建模...
与去年不同的是,这次将所有代码用Python实现了,更简洁,更清晰,甚至可能更高效~~以下是论文全文。
研究背景
2011年10月29日,美国国防部高级研究计划局(DARPA)宣布了一场碎纸复原挑战赛(Shredder Challenge),旨在寻找到高效有效的算法,对碎纸机处理后的碎纸屑进行复原。[1]该竞赛吸引了全美9000支参赛队伍参与角逐,经过一个多月的时间,有一支队伍成功完成了官方的题目。
近年来,碎纸复原技术日益受到重视,它显示了在碎片中“还原真相”的可能性,表明我们可以从一些破碎的片段中“解密”出原始信息来。另一方面,该技术也和照片处理领域中的“全景图拼接技术”有一定联系,该技术是指通过若干张不同侧面的照片,合成一张完整的全景图。因此,分析研究碎纸复原技术,有着重要的意义。
两百万素数之和与“电脑病”
By 苏剑林 | 2014-10-17 | 15602位读者 | 引用原则上来讲,同样的算法,如果分别在Python和C++上实现,那么Python的速度肯定比不上C++的。但是Python还被称为“胶水语言”,它允许我们把主要计算的部分用C或C++等高效的语言编写好,然后它作为“粘合剂”把两者粘合在一起。正因为如此,Python才有了各种各样的扩展库,这些库中有不少是用C语言编写的。因此,我们在编写Python程序的时候,如果可以用这些现成的库,速度会快很多。本文就是用Numpy来改进之前的《两百万前素数之和与前两百万素数之和》的计算。
算法本身是没有变的,只是用了Numpy来处理数组计算,代码如下:
班门弄斧:Python的代码能有多简洁?
By 苏剑林 | 2014-10-07 | 28942位读者 | 引用最近的很多篇文章都是数论内容,属于纯数学的范畴了,对于很多只爱好物理或应用数学的读者可能会看得头晕了。今天我们来谈些不那么抽象的东西,我们来谈谈风筝,并来分析一下风筝的飞行力学。
爱情就像放风筝,线不能来得太紧,也不能拉得太松,你只会给对方飞翔的空间,他/她始终会回到你身边,因为有一条线系着双方。
风筝,在我们这个地方叫做纸鸢,相信大家童年时一定会放过。笔者小时候放风筝时,已经是小学五年级之前的事了。这个暑假突然童心一起,凭着小时候的回忆,简单做了个风筝来玩,居然真的飞起来了!兴奋之余,与大家分享一下。如今再来放风筝,真心感觉到放风筝也有很多技巧,让风筝飞,还不是件容易的事情呢,真可谓人生处处皆学问呀。上面关于风筝的比喻,正是放风筝的真实写照吧。
风筝可以说是人类摆脱地球重力的最原始尝试吧,跟发射宇宙飞船的火箭不同,风筝是借助风力来抵抗重力,严格来讲,即便是现在的飞机,也离不开这个原理(我们最后会谈到)。简单来讲,风筝就是用轻的支架撑开一个轻盈的平面,然后系上一个线圈。我们简单做一个风筝,只需要一张报纸,两条竹篾和一点透明胶,十分钟内就可以完成一个。当然,现在已经有各种各样的好看的风筝,甚至还有龙形的风筝,但是,自己动手简单做一个风筝,还是相当好玩的。
风筝自然是借助风力飞起来的,可是为什么风筝得用绳子牵着才能飞得更高、绳断了反而掉下来?风大多时,才适合放风筝?飞机又是怎么飞起来的?下面我们试着分析这些问题。
最近评论