• TA的每日心情
    开心
    2017-3-7 10:15
  • 签到天数: 102 天

    连续签到: 1 天

    [LV.6]常住居民II

    2014-12-1 14:20 生命的礼物 管理员 楼主 273150
    本文摘自CSDN, 原文链接:[size=12.727272033691406px]http://blog.csdn.net/congduan/article/details/7060155,DC学长发表于2011年12月10日。      

         2011数模国赛已经过去整整三个月,作为负责编程的队员,在此发表一点愚见,也作为年末一点总结,请各位选择性吸收,欢迎拍砖。     
         编程语言,这个估计是大家最关心的。数模中编程语言首选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创新奖,我想获得这个奖肯定