关于数模中编程的一点愚见

  • 数学建模
  • 编程
蒋垒·西南交通大学
2016-06-13
阅读数9074

      编程语言,这个估计是大家最关心的。数模中编程语言首选Matlab,世界公认加默认。当然c语言和其他高级语言也可以使用,毕竟过于通用,在使用上效率不足Matlab。这个效率不是运行的效率,而是解题的效率。但是如果你是c语言或其他语言的顶级大牛,就当我前面说的都是废话,甚至直接忽略我这篇文章,因为你完全有能力搞定所有这些问题,我所说的不过是给普通大众的一点捷径而已,算得上“旁门左道”。可惜,90%以上的童鞋不是。

      Matlab由于其强大的科学计算功能,以及封装的各种toolbox,成为建模编程的得力助手。c在这点上略逊一筹,很多都得自己动手写,尽管c++提供了各种模板库之类的东西,运用起来也不是像Matlab这样的轻松。至于编程语言方面的比较,我也不想说太多,因为语言各有利弊,Matlab卖的那么贵也是有它的理由的。

      Matlab建模优势很大。我仅仅抛砖引玉说几点。首先是各种toolbox和function,它们绝大部分是Mathworks公司的顶级工程师的研究成果,当然有些也是成熟算法的Matlab实现,你也可以自己去Google上寻找业余Matlab爱好者写的toolbox,里面不乏非常出名的算法大牛。Matlab可以轻易的进行矩阵计算,二维三维图形绘制,概率统计,信号(图像也是信号)处理(学通信的童鞋都知道,这个在大三有随机信号分析和数字信号处理等课程要用到),Simulink系统仿真......甚至嵌入式方面也有涉足(记得最初是从奔哥那得知的),还能轻易地其他语言混合编程(本人曾经试过用Matlab里的deploytool将自己写的function编译成托管dll供C#调用,实现简单的C#图像处理应用。具体操作方法不在此介绍,有兴趣者可以参考Matlab高级编程或者Google,Mathworks官网也有简单的视频教程)。

      特别要提的是第三方Matlab toolbox。之所以要提得原因就是,数模的时候,时间紧迫,要是碰到编程很复杂的题目,可能三天都无法出来结果,这个是最可怕的。我记得集训期间,做相机标定的那个题,机器视觉这种研究热门,自然少不了Matlab的身影,于是找到一个Camera Calibration Toolbox for Matlab(http://www.vision.caltech.edu/bouguetj/calib_doc/),最终由于出题思路与普通方法有差距而没用到这个toolbox。但是今年国赛的A题,寻找污染源的问题,需要用到Kriging插值,由于普通教程讲解和公式推导晦涩难懂,编程难以下手,当时打算使用ArcGIS软件直接进行插值后图形绘制,然而事情终不是如你所愿,一个软件3G左右,实验室流量有限,网速有限,要是下下来整个实验室的队伍全完了,而且也要等到猴年马月,估计国赛都完了。因此,遇到这种情况得保持镇定,其实只要稍微花上5分钟Google一下,你就会找到一个名叫DACE-A Matlab Kriging Toolbox( http://www2.imm.dtu.dk/~hbn/dace/)的东西,还有详细的使用例子,当然,前提是你能读懂简单的英文(这个后面再说)。也正是这个toolbox,省掉了一大堆代码和时间,解题效率必然呈指数式增长。

      其实平时训练Matlab的过程中,我不建议太过于依赖toolbox,那个是纯粹的比赛技巧。数模国赛组委会和Mathworks公司近两年联合推出了一个Matlab创新奖,我想获得这个奖肯定不会是靠投机取巧所得。

      要是你不喜欢Matlab,感觉它没什么意思,那你错了。在Matlab的命令窗口输入demo,在打开的Help browser里你会发现如扫雷、3D地球仪之类的GUI小游戏和美妙的2D、3D图形,全部是用Matlab实现的,绝对会让你眼前一亮。当然网络上也有很多发烧友的小程序,也非常有趣(比如萝卜驿站:http://luobo.ycool.com/)。关于如何学习Matlab以及一些Matlab的操作技巧,我也不多说,网上教程很多,这方面的课本和资料也十分丰富。只要培养起兴趣,平时多动手谢谢代码,都会成为高手的。

      除了上面介绍的Matlab之外,我曾经做过一个小的整理,并对各种主流和很有用的小众软件进行了一个归类,如下:

     科学计算:Matlab、Maple(符号计算) 、Mathematica、Excel(绘图、统计)

     概率统计:SPSS、SAS、Eviews、Origion(拟合) 

     系统动力学仿真:Vensim

     优化:Lingo/Lindo、1stOpt 、WinQSB(规划)     

     绘图  :SigmaPlot(专业的科学绘图软件) 、ScienceWord、SmartDraw(很强大的绘图工具)、几何画板 、autoCAD

     其他小众软件:图论、AHP(层次分析法)…

     其他功能软件:tortoiseSVN(版本控制)、dexpot(虚拟桌面)、酷盘(局域网共享协作)

     其他:ansys(有限元分析)、comsol、FLAC2D/FLAC3D...

      有了这些杀手锏,基本上效率可以提高一倍了。其中要提一下的是Excel,很多人觉得它功能不足,其实Excel在数据处理和绘图方面毫不逊色与专业软件,特别是最新的Excel2010,看过有人用它来画动漫人物的视频,至今膜拜不止,不过数模中不推荐用它绘图,太花哨了。

      至于注重自己实现代码,还是使用工具走捷径,很像哲学中的唯物主义和唯心主义,要是你只是功利性地想获奖,那就做个唯物主义者吧。

      这是段聪大神的博文,更多数模编程的知识,可看他的博客,http://blog.csdn.net/congduan/article/details/7060155

收藏
分享
别默默的看了,快来和大家聊聊吧,登录后发表评论~ 登录 立即注册
打赏
蒋垒
打赏金额(金额:¥0)
给Ta留言
赏金已入袋,多谢!(*^__^*)
赛氪APP全新升级

下载赛氪APP

参加有趣活动,获得赛程提醒

分享大学生活,获得前辈指点

意见反馈

产品建议、功能吐槽、使用问题…

欢迎提出关于赛氪网的问题和建议 :)

微信公众号
关注赛氪订阅号
微信服务号
关注赛氪服务号
温馨提示

非常抱歉!本站不支持旧版本IE浏览器~~建议使用IE10/IE11/Chrome/Firefox/Safari等高级浏览器浏览。

温馨提示
温馨提示
帮助与反馈

热门问题