数学建模竞赛不像其他学科竞赛,它没有固定的考场,也许在图书馆,也许在机房,也许在宿舍,更有甚者在公司,在工厂……数学建模竞赛就是这样。他名曰数学,当然要用到数学知识,但却与以往所说的那种数学竞赛(那是纯数学竞赛)不同。他要用到计算机,甚至离不开计算机,但却不是纯粹的计算机竞赛,它涉及物理、化学、生物、电子、医学、农业、管理等、各个领域的知识,但也不是这些学科领域里的知识竞赛,它涉及各学科各领域,但又不受任何一个学科领域的局限。
同时它还需要许多种能力的融合,比如创新能力,短时限内学习全新知识并运用的能力,计算机运用能力等等,是一种综合能力的体现。
所以对参加比赛的同学的要求主要有:
1. 首先要对数学建模有一定的了解,最好能够选修相应的课程,特别是每年春季学校开设的数学建模课;
2. 同时,在建模、编程和写作中,至少应有一项特长,要求是精通,而不是入门,当然最好是“全能型”的人才;团队中每个人的分工不用那么明确。假如写手只是实现一个打字员的功能,把数模高手的思想表达出来,那是不够的,写手要有自己的思想,能够检查对方的错误,能够提出自己的思想。
按我的想法,理想的分工是这样的。数学建模竞赛小组中的每一个人,都能胜任其它人的工作,就算小组只剩下她(他)一个人,也照样能够搞定数学建模竞赛。在竞赛中的分工,只是为了提高工作的效率,做出更好的结果,并不是由于能力不适合做别的工作。
只有能够独当一面的人,才能更好的与他人合作。
3. 由于数学建模训练和竞赛是一个比较漫长的过程(每年的3月-9月),并以团队的形式参赛,因此,良好的心理素质以及团结协作能力、坚持不懈的精神就显得尤为重要了,要做到1+1+1>3的效果。
4. 是否必须要有较强的数学功底才能参加呢,其实这是很多同学的误区。数学建模实际上是一个做科研项目的过程,主要考察的是同学们实际动手和创新能力,和基础数学课的考试成绩并无必然联系。
数学建模不但能够培养同学们建模、编程和写作等方面的能力,还能很好的锻炼同学们脚踏实地、坚忍不拔的性格以及团队合作能力,它能够锻炼和考查一个人的综合素质,这是我们以后走向社会所必需的,也是很多大学生所缺乏的,因此,很多公司都非常喜欢录用参加过数学建模的同学。
为学好数学模型,参加数学建模竞赛取得好成绩,需要做一些什么准备工作?首先,让我们了解一下什么是数学建模;
数学建模是什么?
数学建模竞赛,就是在每年9月份的时候开始的一项数学应用题比赛。大家都做过数学应用题吧,不知道现在的教育改革了没有,如果没有大变化,大家都应该做过,比如说:
树上有十只鸟,开枪打死一只,还剩几只?
这样的问题就是一道数学应用题,正确答案应该是9只,是吧?这样的题照样是数学建模题,不过答案就不重要了,重要是过程。
真正的数学建模高手应该这样回答这道题。
“树上有十只鸟,开枪打死一只,还剩几只?”
“是无声手枪或别的无声的枪吗?”
“不是。”
“枪声有多大?”
“80-100分贝。”
“那就是说会震的耳朵疼?”
“是。”“在这个城市里打鸟犯不犯法?”
“不犯。”“您确定那只鸟真的***啦?”
“确定。”ok,树上的鸟里有没有聋子?”
“没有。”“有没有关在笼子里的?”
“没有。”“边上还有没有其他的树,树上还有没有其他鸟?”
“没有。”“有没有残疾的或饿的飞不动的鸟?”
“没有。”“算不算怀孕肚子里的小鸟?”
“不算。”“打鸟的人眼有没有花?保证是十只?”
“没有花,就十只。”
“有没有傻的不怕死的?”
“都怕死。”
“会不会一枪打死两只?”
“不会。“所有的鸟都可以自由活动吗?”
“完全可以。”
“如果您的回答没有骗人,打死的鸟要是挂在树上没掉下来,那么就剩一只,如果掉下来,就一只不剩。”
不是开玩笑,这就是数学建模。从不同的角度思考一个问题,想尽所有的可能,正所谓的智者千虑,绝无一失,这,才是数学建模的高手。然后,数学建模高手的搭挡---**写作高手(也称写手),会把以上的思想用最好的方式表达出来。
一般的写手会直接把以上的文字放到**里就成了。但是专职的数学建模**的写手不会这样做,她们会先分析这些思想,归整好条理;然后,她们会试着用图画来深入浅出的表达这些思想,或者再使用一些**;这些都是在word中进行,wps什么的当然也可以。她们都是这一行的专家,相信word什么的使用技巧,都够她们写一篇**的了。
她们不仅会打字,而且输入公式的速度也是一流的。她们一定会用一种画图软件,不管是visio还是smartdraw,她们都会用来明确而清晰的表达自己的思想。好了,有了思想,也有了表达思想的人,还少一样东西---实现。
作为数学建模竞赛的评委当然也不是好骗的,不会那么容易的相信高手们的话。所以要一个编程高手实现之(也称程序员)。就上面所说的问题,程序员会编一个**的程序,实现以上所有的情况。
这个程序是这样子的,他对以上所提的每一个选项提供了选择接口,比如说,我们可以选择枪的声音的分贝数,可以从80到100分贝调节,或者干脆从0到200分贝均可,调节方式是无级变速方式,当然,电脑太慢,在遍历的时候可能要指定步长,所以,最好准备个好电脑,cpu一定不要用赛扬的,要用奔腾的,要有ups不间断电源。**程序会尽一切可能按实际所限制的条件遍历所有的情况,看一看还剩下几只鸟。
当然,这不是实践。真的做的绝的,会跑去拿一把枪,拿些塑料子弹。将就着做些实验,然后根距实验条件做一些修正。
把实践结果与**结果、理论结果做比较,再修改理论、**程序、**,再做实验、做**,再比较,再修改,递归到时间的完结。
英语真的很重要,在网上,英文更是当之无愧的霸主,想利用网络查找资料,英语不好则寸步难行。
对建模高手的要求:
常有人问,搞数学建模竞赛是不是需要我学习很多知识啊?比如《图论》、《概率论》、《神经网络》、《组合数学》、《小波分析》、《泛函》、《最优化》..
1、全国数模竞赛一等奖的获得者中,有一大批人并不是数学系的学生。所以我的回答是,如果有时间和能力学习这些课程当然最好,没有学习也没有太大的关系。很多优秀的**,其高明之处并不是用了多少数学知识,而是思维比较全面、帖合实际、简单的程序,能解决问题或是有所创新。
在平常的学习过程中,要注意培养自己的观察能力、想象能力、解决问题的能力和创新能力。碰到问题多与实际联系起来,多思考一下,要有解决问题的信心。在比赛的时候一定要抱着一种信念,那就是我一定能把这个问题解决掉,不管用什么求解方法。
2、有时候,在**中可能碰见一些没有学过的知识,怎么办?那就现学现用呗。这其实也是大家平时一种能力的积累。
比如如何在网上查阅相关资料;如果只有英文资料,能大致读懂资料大意,或用一些软件翻译后能看懂其大意;而且也不是全篇累牍,只需关注有用章节即可;在前人已有的研究上提出自己解决实际问题的方法。这是一种翻译能力,是一个人将实际当中的问题,经过若干假设,将实际问题的某一部分信息缩减,抽象,提炼,从而“翻译”为一个合理的数学模型。这也许不是一个人的能力能完成的,但是通过全体小组成员的讨论,研究后,最终要提出一种解决问题的办法;即使一个建模高手一个人能担当此任,也需要与全体小组成员讨论。
不要认为写手和程序员不用参与进来,恰恰在建模这一阶段小组成员必须参与,否则,一个建模高手建的数学模型再好,如果程序员不能理解解决问题办法的思想,它就没办法编写符合要求的程序,同样的,一个写手如果没有理解,他也无论如何写不出一篇符合要求的文章来(而且这一点是至关重要的)。所以,我希望你们最好每个人都是一个全能型的选手,但是要有突出的特点。所以在建模这一过程中,全体成员和老师的沟通也至关重要。
其实,不止这一过程的沟通重要,整个参与比赛的时间里,沟通都是非常重要的事情,不要认为自己好像还没有完全搞懂,就不好意思问,所有的问题必须讨论清楚才能在短时间内高效完成**。
3、同时,也要求建模高手能将自己设计的求解方法变成程序流程图,便于上机实现。指导老师有些对程序设计这一方面可能并不在行,所以建模高手和程序员两人应该把这个任务完成,否则只有**,没有实际的结果作为支撑,再好的**也显得很苍白,就不可能获得好成绩。这也是一种翻译能力,就是将建立的数学模型“翻译”成能安排计算机计算的能力。
在你们学习一门高级程序设计语言时,要有意识的培养自己的这种能力。不管是什么语言,c/c++语言,或是其他,一个程序的核心就是算法,语言只是作为表达核心的一种工具。犹如,方法是其灵魂,而高级语言只是其身上穿的一件衣服而已。
只要灵魂不变,用什么语言,只是换了件合适的衣服而已,袖子在**,只需对照书上的要求找到就行了。对于一个建模手而言,“翻译”过来的方法步骤必须清晰,逻辑性强,具体,最好能预计到程序员在编写程序时这个方法是否能实现的问题。所以这里也要求建模手有编写程序的经验。
在任务实施阶段,当需要的时候,能和程序员一起讨论程序的问题。
4、最后,算法设计的好坏将直接影响运算速度的快慢,建议大家多用数学软件(mathematice, matlab, maple, mathcad, lindo, lingo, sas 等),这里提供十种数学建模常用算法(见附件一),大家可以在学习程序设计语言的时候有意识的掌握其中提到的各种方法。在参赛之前,可以试着编写一下这些常用算法,也可以在网上**相关的程序,但是一定要掌握好该程序的应用方法,并在实际中检验程序的正确性。
对程序员的要求。
其实说起来,程序员的工作也是属于一种“翻译”工作,即将已有的程序流程图翻译成计算机能懂的语言,告诉计算机做什么工作。一般的程序员都能做这样的事情,但真正的高手,往往处理的不是这么简单的问题,很多时候也许只是同伴或者老师的一种建模思想,在没有任何流程图,甚至连一些简单的实现步骤也没有,就只有对这种思想的只言片语的描述的情况下,高手就能把复杂的建模思想变成程序,并且得到结果。这是一种非常重要的能力,只有在平时的练习、学习中,反复高强度的锻炼,才能具备这种能力。
这是最重要也是最高的一个要求。
当然对程序员还有以下要求:
程序员在建模过程中当然要协助建模手建立模型,并针对将来编制程序时可能出现的问题,提供符合实际的建议。在这一阶段还要做一些相关准备工作,比如,将题目中涉及的数据处理成程序能用的类型。并记得实时保存,自己带一个笔记本,随手记下每一个文件夹下做的事情,不要认为我记性好,不用做这些枯燥的事情,恰恰相反,这些工作都是砍柴时候做的磨刀功夫。
因为参赛的这些天,很多时候,刚刚建立的模型需要修改,当然包括一些原始数据,和程序结果的数据,或者源程序,但是修改过后,有可能发现这些修改可能比不修改之前结果还差,又需要重复原来的工作,几经反复之后,再好的记性都有可能搞糊涂了,所以除了要随时保留程序版本之外,还要对文件夹所做工作进行注释。此时,你的笔记本就发挥强大的功能啦!所以,只要有时间就多按几下ctrl+s。
在实际的编制程序的时候,有的同学认为非要有几千行的程序才是真正的程序。恰恰相反,一个程序的篇幅太长,势必给调试程序带来难度,给具体错误的查找带来麻烦。真正的编程高手应该是所有的程序长度都很短,用很多子程序实现各个部分的功能,多用一些matlab(或其他软件)中已有的函数,缩减程序的长度。
你的主程序中,也许最后只剩下一些自编函数或程序自带函数的调用,但是,在调试程序的时候,这些简单的函数调用会让你的思路特别清晰,能快速的解决问题,尤其是经过几天高强度的脑力消耗之后。
还有一个习惯非常重要。很多同学在学习一门程序设计语言的时候,不喜欢对自己的程序加注释,认为自己总是能看懂自己编写的程序。一个方面,当时可能对该程序非常熟悉,但经过一些时间之后,很多事情有变化,也许刚刚用到的一个符号记号表示坐标,现在又有可能表示的是长度等其他容易混淆的概念,到时候回过头来在看自己的程序,可能会一头雾水,即使看懂了,也花了很多时间。
另外一个方面,在参加比赛的时候,你们是一个团队,很有可能在你出现困难的时候希望有人能帮忙,帮你找错误,帮你编写小程序等等,在用到该程序的时候如果有了较好的注释,就可以节省很多不必要的时间。将来,即算你走上了工作岗位,你也是一个社会人,需要和你的同事合作,尤其是it行业,各个程序之间的接口非常重要,这里也需要做这些注释工作。既然需要,我们就要养成一个良好的习惯,随手注释刚才的工作。
数学建模讲座
足球比赛的排名。问题 cmcm 93b 给出我国12支足球队在比赛中的成绩,要求 1 设计一个依据这些成绩排出各队名次的算法,并给出结果。2 把算法推广到任意n个队。3 讨论这些数据应有什么条件才能用你的方法排名。从表中给出的比赛成绩看,数据不整齐,两队间可能有三,二,一场,甚至没有比赛。一合理的假...
数学建模讲座
本本讲座主要目的 通过对一些简单的数学建模过程的分析,使队员了解数学建模的基本过程,掌握数学建模的基本知识和一些简单常用的数学基础知识。近期主要任务 1 熟悉计算机。2 学会查阅资料,积累相应的数学与数学建模知识。沙子的开采。一问题的背景。沙子是最重要的建筑材料之一,并一直有稳定的市场。沙子通常在海...
数学建模讲座
学建模知识讲座。一 数学建模思路。数学产生于实践,服务于实践,数学的学习也应该最终服务于实践,对于数学的教学,应该是 与其让学生学习数学,不如让学生学习数学化。几个概念 数学化 就是运用数学思想和方法,来分析和研究客观世界的种种现象,并加以整理和组织的过程。数学模型 就是针对或参照某种事物系统的特征...