数学建模模糊图像处理

2011-12-16 22:35:11 meng_sun 阅读数 1919

     看了这个东东后,感觉我就那么弱地参加了国赛。没拿国一,是应该的。自己的积累还是太浅啊。有时间,有机会要为我所爱 的数模努力!想起比赛时用一晚上时间重看了一遍LINGO 才算出来。

***********************************************************************************************************************************

关于数模中编程的一点愚见http://blog.csdn.net/xiangshimoni


 
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创新奖,我想获得这个奖肯定不会是靠投机取巧所得。
要是你不喜欢Matlab,感觉它没什么意思,那你错了。在Matlab的命令窗口输入demo,在打开的Help browser里你会发现如

Minesweeper

(扫雷)

World Traveler 3-D Globe

(3D地球仪)
之类的GUI小游戏和美妙的2D、3D图形,全部是用Matlab实现的,绝对会让你眼前一亮。当然网络上也有很多发烧友的小程序,也非常有趣(比如萝卜驿站:http://luobo.ycool.com/)。关于如何学习Matlab以及一些Matlab的操作技巧,我也不多说,网上教程很多,这方面的课本和资料也十分丰富。只要培养起兴趣,平时多动手谢谢代码,都会成为高手的。
说了那么多Matlab,提谈谈刚才提到的英语。数学建模中英语也是必过的一关,美赛尤其重要(这个我也没参加,先不说)。因为编程的队员负责的不能只是编程这一部分,也必须懂得资料和数据的查找,海量数据处理,建模相关数学知识,以及论文格式排版和内容修改,会使用绘图等工具软件and so on。你不可能提前得知题目的类型,尽管类型也只有那么几十种,但是资料在哪里找却不能预测。英文的功底决定你可以上国外的网站(也得懂点翻墙什么的技巧)找相关数据,可以看懂相关英文文献,可以使用相关英文软件(毕竟不是所有软件都是国产和汉化后的,国产的一般不给力,但是有能力也可以自己提前汉化一下通用的英文软件,不过这个很费时间,考虑到个人因素,大家看着办,想当初自己费劲心血汉化完Lingo后,发现网上已经有了汉化版,瀑布汗当时。但是后来发现那个汉化版很多还是不太准确的,用自己的实在。这里有侵权之嫌,友情提示最好不要作为商业用途,后果自负)。另外就是Matlab的Help之类的了,有些几乎找不到找到中文解释的,必须得咬咬牙看英文了。
另外Lingo也是一种很好的建模语言,在求解优化问题等方面具有得天独厚的优势,由于本人基本上没有实践过,也毫无经验可言,不过推荐大家学习学习。
前面说的是编程语言,其实数模过程中语言都是次要的。重要的是结果,结果重于过程,有悖于常规观念。但是这是事实。除非碰到类似于公交车调度一样的题目,写出来的代码评委一般不太重视的,代码最终也只是当做附录处理,毕竟数模不是ACM,不是纯粹的程序设计。数模看得是解决的方法和你得出结果,至于你是怎么得出正确结果的,那都无关紧要。编程过程中也不需要写出速率最优化的代码,但是前提是保证能短时间内出结果。这些对于一个专业程序员来说也许是很不好的习惯,但是记住,这是数模。你可以写一千行代码得出结果,也可以写10行得出一样的结果,可以运行1分钟出结果,也可以运行1s出结果,只要结果正确了,其他都不重要了。但是记住,这是比赛,不是训练,训练要有成果,必须练好基本功。
说到结果,数模中可以“不择手段”。这也算是编程队员的一种必备的能力。比如拟合一个特别复杂的非线性方程,Matlab处理的时候有个“缺点”是必须选择合适的初始值,否则选择不当,迭代N次后拟合效果可能千差万别。而正确选取初始值也是十分麻烦的事,记得以前做本底趋势线拟合的时候找到一篇专门研究如何估计初始值的论文,不过后来放弃了。不仅是Matlab,专业拟合软件如Origin等也要手工选取初始值。但是使用过1stOpt的人,却可以不费吹灰之力得到很好的结果。1stOpt虽然是国产软件,在拟合和优化方面却力压群雄,提供神经网络、遗传算法、蚁群算法、模拟退火等专业算法的选择,甚至包括一种自创的高效算法,在无需手动设置初始值的情况下短时间内拟合出方程并绘图和预测。题目中拟合只占了很小一部分,若是花太多时间在代码上,无疑会在比赛中处于下风。
这样,学会各种专业软件,具备短时间内学会小众软件的能力也是编程队员的优势。我曾经做过一个小的整理,并对各种主流和很有用的小众软件进行了一个归类,如下(不完整,可以按需要去收集,数学中国上面有):
科学计算: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,看过有人用它来画动漫人物的视频,至今膜拜不止,不过数模中不推荐用它绘图,太花哨了。
至于注重自己实现代码,还是使用工具走捷径,很像哲学中的唯物主义和唯心主义,要是你只是功利性地想获奖,那就做个唯物主义者吧。
刚才归类软件的时候,也将版本控制等功能软件放进去了。这个是有目的的。版本控制很有用,这个对很多程序员们都再熟悉不过了。要是没听过,就不厌其烦听我说我吧。编程的队员可能不会一次就完成代码,经常不断修改更新代码,但是要是修改过之后把以前版本删除了,后来又要用到怎么办,手动备份是见吃力不讨好的事。这时候版本控制软件就起作用了,配置好服务器和版本库,接下来的工作就只是简单的更新和提交了,系统自动打上时间戳,以便于后续的版本修改对比。数模中论文丢失莫过于最恐怖的事,这个同样交给版本控制,不能说万无一失(硬盘损坏也可能发生,做好备份很关键),也能减轻一点工作吧。
另外虚拟桌面有时候也有必要,这个得看个人喜好。要是你用的是Linux系统,那就完全可以略过这里。绝大部分童鞋还是用的Windows系统,毕竟Word写论文还是挺方便的(专业排版还是去用Latex吧,不过一般word足够,尽管word经常会出现很多奇怪的问题,Latex听说要写代码的,编程大师弄的东西就是不一样)。虚拟桌面也就是虚拟出几个桌面出来(很废话),以便管理混乱的窗口。数模的时候开个word,开个excel,开个Matlab,开个浏览器、记事本、图片查看器、资源管理器......这都是家常便饭,弄个虚拟桌面,占点资源换来方便也有价值。要是你有多台显示器,接在一台电脑上也不错,就不用什么虚拟桌面了。
当然还有那个局域网共享。数模是三个人的战斗,但是往往要使用多台电脑协作,资源共享是件麻烦事。比如写代码的时候,开两台配置好环境的计算机,以备不测,必能大大减轻单机的负荷。U盘太慢,也容易损坏文件,移动硬盘,估计不一定有,有也不方便。搭好局域网,做好共享很必要。QQ局域网传文件也可快,可惜无法多人同时协作和共享。我们国赛期间用的酷盘,其他的没试过,可能有更好的东西,大家可以去摸索。
编程的人需要做的不仅仅是这些,比赛前做好万全的准备才能有条不紊。等到比赛时再去到处找代码写代码,那就晚了。好的习惯就是平时将各种代码搜集整理好,我这里有个列表仅供参考,如有疏漏,恳求指出:
l 规划&优化(lingo):0-1规划、线性规划、整数规划、非线性规划、动态规划、单目标、多目标、
l 图论:最短路径、hamilton圈、旅行商TSP问题 、最小生成树、网络最大流、最小费用流、
l 插值拟合 :插值、线性拟合 、非线性拟合、最小二乘拟合
l 概率论&数理统计:概率模型、方差分析、回归分析(二次曲线回归,线性回归)、
假设检验、分布拟合检验、参数估计
l 微分方程:常微分方程、微分方程组、稳定状态、灵敏度分析
l 差分方程:
l 时间序列:
l 马氏链:
l 聚类分析 :
l 智能算法 :神经网络、遗传算法(gatool)、模拟退火
l 排队论:
l 判别分析:
l 生存数据分析:
l 综合评价:层次分析、综合评分法、综合指数法、Topsis法、秩和比法
l 预测:灰色预测
l 系统仿真:蒙特卡洛
l 模糊数学:模糊聚类、模糊综合评价
l 图像处理:灰度化、二值化、滤波、边缘提取、三维重建
l 数据处理:主成分分析、因子分析
l 解方程:
......
最好是Lingo和Matlab代码都准备好,尽量收集到并提前做好测试,相关软件前面已经提过,不再赘述。
以及各种数据处理方法:

a) 回归分析法(数理统计方法)-用于对函数f(x)的一组观测值(xi,fi)i=1,2,…,n,确定函数的表达式。

b) 时序分析法--处理的是动态的时间序列相关数据,又称为过程统计方法。

c) 多元统计分析(聚类分析、判别分析、因子分析、主成分分析、生存数据分析)。

还有图形绘制:条形图、折线图、散点图、饼图、频率分布直方图......
当然,资料和数据收集地址也得提前找好,当初比赛前我提前下载了1985-2009年的国家统计年鉴,费了不少流量。现在将有关资料放出来:
资料检索:
n CNKI入口(西电图书馆的CNKI账号已经过期,只有出此下策了)
http://202.119.208.220:8002/kns50/index.aspx
http://61.155.19.94:8011/kns50/
http://cnki1.sztsg.net/kns50
n OA开放图书馆
http://www.oalib.com/search.asp?q=&sa=OA%E5%86%85%E5%AE%B9%E6%90%9C%E7%B4%A2
n 万方数据库(期刊,论文)
n 超星图书馆(图书馆入口)
n 百度文库,豆丁(下载器)

l 数据检索
n 中国教育统计网
http://www.stats.edu.cn/
n 中国统计年鉴
http://www.stats.gov.cn/tjsj/ndsj/
n 国家数据统计库
http://219.235.129.58/welcome.do
n 中国宏观数据挖掘分析系统
http://number.cnki.net/cyfd/
n 中国基础教育网
http://www.cbe21.com/subject/physics/
n 中国证券网
http://www.cnstock.com/
n 中国科学气象数据网
http://cdc.cma.gov.cn/
n 中国科学文献服务系统
http://sdb.csdl.ac.cn/
n 中国引文数据库
http://ref.cnki.net/knsref/index.aspx
n 中科院科学数据库
http://www.csdb.cn/
n 中国动物主题数据库
http://www.zoology.csdb.cn/
n 中国统计年鉴下载:
http://lib.njue.edu.cn/libtool/data.htm

最后,说明一点,组队的时候,最好能有两个会变编程的队友,这样遇到像公交车调度的问题,以免出现孤军奋战的局面。两个人可以进行思想的碰撞,必然会提高效率。
希望以上愚见对诸位希望参加数学建模,畏惧数模编程的童鞋起到一丁点的帮助。
祝参加数学建模的童鞋都能取得好成绩~~~~
(初稿。后续可能加入
更多经验,尽请期待)
2017-12-10 22:13:31 KevinBetterQ 阅读数 3621

#《数学建模算法与应用》方法概述


序言:学习司守奎《数学建模算法与应用》第2版过程中,给出一个内容的提纲,希望可以在回忆复习时快速建立知识结构。包含了数学建模所需用到的一些方法和常见问题类型。
本文仅仅建立一个学习过程中的知识框图,后续会将具体算法理解与Matlab实践整理出来。
其中前半部分“方法类”为一些常用数学建模方法,单独拿出来介绍
后半部分为总结的“问题类”,主要为规划、分类、优化、评价和预测,也总结了网络类和图像处理类问题


—————— 方法类 ——————

一、Matlab求解规划类和极值问题

数学规划为在约束条件下追求效益而做的安排。
Matlab知识负责实现数学计算,目标函数和约束条件还是需要自己去寻找关系建立方程。
多目标规划:针对多目标,加权系数法和优先等级法。

二、插值和拟合

根据一组数据构造一个函数作为近似
插值曲线要过数据点,拟合曲线整体效果更好。

三、偏最小二乘回归分析

一般研究两组变量间的相互关系

四、微分方程

需要了解研究问题领域相关规律
规律列方程——>Matlab求解微分方程

五、数理统计(需对概率论很熟悉)

利用样本来估计总体时,需要数理统计
参数估计、假设检验 ——> 方差分析、回归分析
Bootstrap扩充样本

六、时间序列

通过构造过去的时间序列并处理来研究其变化规律

  1. 移动平均法:直接平均
  2. 指数平滑法:加权平均
  3. 差分指数平滑法:增量的加权平均
  4. 季节性时间序列预测:对季节求系数

ARMA(自回归移动平均序列)构建及预报

七、支持向量机

找到一个超平面,使得其尽可能多地将两类数据点分开
线性可分SVM、线性SVM、可分SVM

—————— 问题类 ——————

一、规划类

寻找目标函数和约束条件 ——> Matlab求解

二、多元分析类(分类、聚类和相关性分析)

(主要是针对多个变量的统计分析)

  1. 聚类分析
    对样本的Q型聚类
    对指标的R型聚类
    (利用相似距离进行聚类)
  2. 主成分分析
    将多个指标转化为少数几个不相关的综合指标
    标准化 -> 相关系数矩阵 -> 特征值和特征向量 -> 组成新指标 -> 选取主成分 -> 得到贡献率
  3. 因子分析
    类似主成分分析,但通过计算初等载荷矩阵选择主因子
  4. 判别分析
    利用统计方法根据研究个体的观测指标进行归类
  5. 典型相关分析
    研究两组变量间的相关方法。
    思想:分别找出两组变量的各自的某个线性组合,讨论之间相关关系。
  6. 对应分析
    R-Q型因子分析,在同一因子平面上对变量和样本一块进行分类。
    行点和列点用同一二维关系表示,绘于同一散布图。
  7. 多维标度法
    在指标个数和本身不清晰,仅知道客体间某种距离情况下,研究客体间的结构关系。

三、优化类

求组合优化问题的全局最优解。不断迭代产生新解直到最优。

  • 模拟退火:“状态转换”
  • 遗传算法:“逐代进化”
  • 改进遗传算法

区别:产生新解方式不同

四、评价类(评价与决策)

(关键点在确定评价指标的权重上)

  1. 理想解法(TOPSIS法)
    找出虚拟正理想解和负理想解,测距找最优
  2. 模糊综合评价法
    针对考核指标难以量化,以等级制解决。可以多层次评判,权重主观。
  3. 数据包络分析
    多指标输入和多指标输出。(针对发展情况的评价较为方便)
    无需假设权重
  4. 灰度关联分析(主观)
    计算评价对象和评价标准的关联系数及关联度
  5. 主成分分析
    指标转化,利用特征值和特征向量
  6. 秩和比综合评价法
    利用秩和比进行优劣排序

五、预测类

  1. 微分方程预测模型
    基于相关原理规律的因果预测法,大多为物理和几何方面。
  2. 灰度预测
    不仅利用原始数据序列,而且对原始数据做累加或其它处理得到近似的指数规律再进行建模
  3. 差分方程
    (解得问题觉得更像高中应用题)
  4. 马尔可夫预测
    系统未来时刻的情况只与现在有关,而与过去历史无直接关系
  5. 时间序列 (根据趋势进行预测)
    通过构造过去的时间序列并处理来研究其变化规律
  6. 插值和拟合 (根据趋势进行预测)
    根据一组数据构造一个函数作为近似
    插值曲线要过数据点,拟合曲线整体效果更好。
  7. 神经元网络(根据参数预测)
    BP神经网络:反馈式地不断调整学习参数。
    BPF神经网络:把网络看成对未知函数的逼近

六、图与网络类

对于图与网络模型,无论是什么情景,方法总逃不出以下内容

1、最短路问题

  • Dijkstra算法:单源最短路
  • Floyd算法 :任意两点间的最短路

2、最小生成树

  • 加边
  • 加点

3、最大流、最小费用流

4、旅行商问题
改良圈算法

5、统筹

  • 计划网络图
  • 关键路径

七、数字图像处理

  • 图像表示
    采样 + 量化 = 数字图像的矩阵表示
    图像类型:二值、灰度、RGB彩色图像
  • 处理方法
    亮度转换、空间滤波、频域变换
  • 应用
    水印、加密式隐藏……
2019-03-12 09:10:35 SSS_Benjamin 阅读数 3488

这篇文章是本人的数学建模队友在建模过程中的一些心得,联系作者请留言,未经允许严禁转载

1、数学建模的定义

  数学建模就是根据实际问题建立数学模型,对数学模型来进行求解,然后根据结果去解决实际问题。当需要从定量的角度分析和研究一个实际问题时,人们就要在深入调查研究了解对象信息、作出简化假设分析内在规律等工作的基础上,用数学的符号和语言作表述来建立数学模型。举个最简单的例子,初中我们就做过关于小河渡船的问题,一条长为L的小河,船A从小河上游除法,船B从小河下游出发,流水流速是V0,小船船速是V1,问多长时间两船相遇?
  上题是一个最简单的数学问题之一,因为它忽略了很多的因素,比如流水的速度会不会变化呀?流水速度怎样变化呀?考虑到船的位置,小河中间和先和边缘喝水流速会不会不同呀?船在不同的位置速度会不会也不一样啊?靠岸时离岸时速度比较低呀?等等问题。当你能把这些因素全部考虑进去并加以解决的时候,那你就是在做一个数学建模问题。
  上面提到了一个很重要的关键词——因素。遇到问题首先要做的就是分析问题,而分析问题的关键在于找出和问题相关的所有因素,只有把所有的因素全部找到了,接下来你才能针对问题给出一个合理而且完整的答案。数学建模从生活来,但实际问题中的很多问题过于复杂,需要考虑很多因素,但一些次要因素往往被忽略用于简化问题,这时我们需要给一个明确且合理的理由,解释或证明这些次要因素在大成目标的过程中可以被忽略或者何时被忽略,当我们把核心因素提取出来时我们就进入了数学问题中。
  数学建模要建立、使用一些模型来解决问题,那么我们必须要了解常用的数学模型的思想和方法,并且要尽可能的学会使用这些方法。常见的模型有——灰色预测,灰色关联分析方法,主成分分析方法,模糊聚类分析方法,随机模拟(蒙特卡罗算法),多元回归模型,正交试验设计,图论,目标规划模型,马尔可夫预测方法,时间序列分析,模糊综合评价模型,层次分析模型,模糊数学方法,模拟退火算法等。
1.灰色预测
  基于灰色建模理论的灰色预测法,按照其预测问题的特征,可分为五种基本类型,即数列预测、灾变预测、季节灾变预测、拓扑预测和系统综合预测。这五种类型的预测方法,都是区域开发研究中重要而且常用的预测方法。
2.灰色关联分析方法
  在实际问题中,许多因素之间的关系是灰色的,人们很难分清哪些因素是主导因素,哪些因素是非主导因素;哪些因素之间关系密切,哪些不密切。灰色关联分析,为我们解决这类问题提供了一种行之有效的方法。
3.主成分分析方法
  地理环境是多要素的复杂系统,在我们进行地理系统分析时,多变量问题是经常会遇到的。变量太多,无疑会增加分析问题的难度与复杂性,而且在许多实际问题中,多个变量之间是具有一定的相关关系的。因此,我们就会很自然地想到,能否在各个变量之间相关关系研究的基础上,用较少的新变量代替原来较多的变量,而且使这些较少的新变量尽可能多地保留原来较多的变量所反映的信息?事实上,这种想法是可以实现的,主成分分析方法就是综合处理这种问题的一种强有力的方法。
4.模糊聚类分析方法
  模糊聚类分析,是从模糊集的观点来探讨事物的数量分类的一类方法,主要包括基于模糊等价关系与基于最大模糊支撑树的模糊聚类分析方法。
5.随机模拟(蒙特卡罗算法)
  随机模拟法也叫蒙特卡罗法,它是用计算机模拟随机现象,通过大量仿真试验,进行分析推断,特别是对于一些复杂的随机变量,不能从数学上得到它的概率分布,而通过简单的随机模拟就可以得到近似的解答。Monte Carlo 法也用于求解一些非随机问题,如重积分、非线性方程组求解、最优化问题等。需要指出的是,Monte Carlo计算量大,精度也不高,因而主要用于求那些解析方法或常规数学方法难解问题的低精度解,或用于对其他算法的验证。
6.多元回归模型
  由于客观事物内部规律的复杂性及人们认识程度的限制,无法分析实际对象内在的因果关系,建立合乎机理规律的数学模型。所以在遇到有些无法用机理分析建立数学模型的时候,通常采取搜集大量数据的办法,基于对数据的统计分析去建立模型,其中用途最为广泛的一类随即模型就是统计回归模型。
7.正交试验设计
  正交试验设计是利用正交表科学的安排与分析多因素试验的方法,是最常用的试验设计之一。正交表分为等水平正交表和混合水平正交表。等水平代表各因素所取的水平数相同,混合水平表示各因素的水平数不一定相同。
8.图论
  图论中的“图”是指某类具体事物和这些事物之间的联系。如果我们用点表示这些具体事物,用连接两点的线段(直的或曲的)表示两个事物的特定的联系,就得到了描述这个“图”的几何形象。图论为任何一个包含了一种二元关系的离散系统提供了一个数学模型,借助于图论的概念、理论和方法,可以对该模型求解。图论是运筹学中的一个经典和重要的分支,所研究的问题涉及经济管理、工业工程、交通运输、计算机科学与信息技术、通讯与网络技术等诸多领域。其中包括的问题有最短路问题、最大流问题、最小费用流问题和匹配问题等。
9.目标规划模型
  为了克服线性规划的局限性,目标规划采用设置偏差量、统一处理目标与约束以及设置目标的优先级与权系数等手段,除刚性约束必须严格满足外,对所有目标约束均允许有偏差。目标规划的求解过程要从高到低逐层优化,在不增加高层次目标的偏差值的情况下,逐次使低层次的偏差达到极小。
10.马尔可夫预测方法
  对事件的全面预测,不仅要能够指出事件发生的各种可能结果,而且还必须给出每一种结果出现的概率,说明被预测的事件在预测期内出现每一种结果的可能性程度。这就是关于事件发生的概率预测。马尔可夫(Markov)预测法,就是一种关于事件发生的概率预测方法。它是根据事件的目前状况来预测其将来各个时刻(或时期)变动状况的一种预测方法。马尔可夫预测法是地理预测研究中重要的预测方法之一。
11.时间序列分析
  按照时间的顺序把随机事件变化发展的过程记录下来就构成了一个时间序列。对时间序列进行观察、研究,找寻它变化发展的规律,预测它将来的走势就是时间序列分析
12.模糊综合评价模型
  模糊综合评判方法,是一种运用模糊数学原理分析和评价具有“模糊性”的事物的系统分析方法。它是一种以模糊推理为主的定性与定量相结合、精确与非精确相统一的分析评价方法。由于这种方法在处理各种难以用精确数学方法描述的复杂系统问题方面所表现出的独特的优越性,近年来已在许多学科领域中得到了十分广泛的应用。
13.层次分析模型
  层次分析法(简称AHP方法),是一种定性与定量相结合的决策分析方法。它是一种将决策者对复杂系统的决策思维过程模型化、数量化的过程。应用这种方法,决策者通过将复杂问题分解为若干层次和若干因素,在各因素之间进行简单的比较和计算,就可以得出不同方案的权重,为最佳方案的选择提供依据。
14.模糊数学方法
  模糊数学方法,是一种研究和处理模糊现象的新型数学方法。这一方法,是由美国自动控制专家查德(L.A.Zadeh)于1965年首次提出来的。在经典集合论中,一个元素对于一个集合,要么属于,要么不属于,二者必居其一,绝不允许模棱两可。这一要求就从根本上限定了以经典集合论为基础的常规数学方法的应用范围,它只能用来研究那些具有绝对明确的界限的事物和现象。但是,在现实世界中,并非所有事物和现象都具有明确的界限。譬如,“高与矮”,“好与坏”,“美与丑”,……,这样一些概念之间就没有绝对分明的界限。严格说来,这些概念就是没有绝对的外延,这些概念被称之为模糊概念,它们不能用一般集合论来描述,而需要用模糊集合论去描述。
15.模拟退火算法
  模拟退火算法来源于材料的热处理原理,将金属加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。根据Metropolis准则,粒子在温度T时趋于平衡的概率为e-ΔE/(kT),其中E为温度T时的内能,ΔE为其改变量,k为Boltzmann常数。用固体退火模拟组合优化问题,将内能E模拟为目标函数值f,温度T演化成控制参数t,即得到解组合优化问题的模拟退火算法:由初始解i和控制参数初值t开始,对当前解重复“产生新解→计算目标函数差→接受或舍弃”的迭代,并逐步衰减t值,算法终止时的当前解即为所得近似最优解,这是基于蒙特卡罗迭代求解法的一种启发式随机搜索过程。退火过程由冷却进度表(Cooling Schedule)控制,包括控制参数的初值t及其衰减因子Δt、每个t值时的迭代次数L和停止条件S。
  以上是学习数学建模需要掌握的常见模型及方法,请小伙伴们一定要掌握哦。

2、数学建模常用的软件

1、Matlab:数学建模最常用的软件之一是MATLAB,原因在于MATLAB强大的功能,MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
2、数学建模要求至少熟练使用一种编程语言,并对其他语言有所了解,因为编程在有些时候用于简化问题方面是非常有用的,他同时也是很多其他软件的基础,是我们掌握一门算法必备的工具。
3、lingo(可用于解决线性规划问题)
4、在有些问题中我们需要做数据挖掘和数据统计,这时我们就需要一个好的数学统计软件——SPSS、SAS、STATA。
5、美赛中,掌握PS也是一项重要的技能。
  需要使用的软件还有很多,比如ARCGIS做地理信息分析,pathfinder做人员疏散研究等等等等,等待大家去开发。

3、数学建模比赛常备知识

  • 论文查找很重要,第一天往往实在查论文,所以要学会使用搜索引擎。
  • 组队一般是三个人,所以需要好的队友,需要很好的团队合作和沟通,请务必在寻找队友时多花些功夫。
  • 比赛前一定要积累知识,同时要注意休息,因为熬夜是肯定的。
  • 平时多学习编程思想,多做一些东西,比如生成式对抗网络的应用,在比赛前可以做准备,因为比赛时没那么多时间。
  • 提交论文的时间一定要注意,所以队长务必打起精神,吧自己的任务做好,控制表最好提前打印好,早点上传。
  • 选赛题的时候要考虑清楚,但是不要在这个上面花费太多时间。
  • 论文排版很重要,可能会让你的一等奖变成二等奖,多用流程图解释往往更清晰。
  • 最后,遇到难以解决的问题一定不要慌,自信自己一定能走过去,找到解决方法。

  以上只是我的经验之谈,仅做参考,天道酬勤,相信努力+态度+方法=成功,数学建模比赛最重要的还是学习到很多技能,每个人都能在自己的舞台上绽放光芒。

2018-02-26 17:58:04 cjsh_123456 阅读数 20732

一、图像复原与图像增强的区别

图像的增强是一个主观的过程,其目的是改善图片的质量,对感兴趣的部分加以增强,对不感兴趣的部分予以抑制。而图像复原是一个客观的过程,针对质量降低或失真的图像,试图恢复其原始的内容或质量。复原技术是面向退化模型的,并且采用相反的过程进行处理,以便恢复出原图像。在进行图像复原之前要先建立起其退化模型,根据该模型进行图像复原。

课本中的图像退化过程建模为一个退化函数和一个加性噪声。


假设H是一个线性时不变的过程,则我们可以得到,式子中的“*”表示卷积。其频率域的表示为:

对于只有加性噪声的情况,我们可以通过一些噪声模型(例如高斯噪声,瑞利噪声,椒盐噪声等等)以及对这些噪声参数的估计,来选择合适的空间滤波器(如均值滤波器,中值滤波器)或者频率滤波器(带阻/带通滤波器,低通/高通滤波器,陷波滤波器)来进行滤波。

二、退化函数的估计

在图像复原中,我们需要对退化函数进行估计。主要有观察法,实验法,数学建模法。

观察法通过选择噪声较小的子图像(减少噪声的影响)来得到H(u,v),然后根据此信息来构建全图的H(u,v),之后利用后面的复原方法来复原。实验法是指我们可以使用或设计一个与图像退化过程相似的装置(过程),使其成像一个脉冲,可得到退化系统的冲激响应 H(u,v) = G(u,v) / A。而建模估计则是从引起图像退化的基本原理进行推导,进而对原始图像进行模拟,在模拟过程中调整模型参数以获得尽可能精确的退化模型。课本中有两种模型,大气湍流模型和运动模糊模型。

大气湍流模型:

通用形式为。其中,k是与湍流性质有关的常数,k越大,图像越模糊,与高斯低通滤波器有着相同的形式。在实现该滤波器的过程中,由于中心化,要注意u,v应该分别替换为各自与频率中心之差,假设频率中心为(M/2,N/2),则替换为u-M/2和v-N/2。与我们之前频率滤波器的实现相同。

其傅里叶频谱如下:


注意:实现过程与我们之前的频率滤波器的实现一样,都需要中心化。

我在对图片施加大气湍流退化模型的时候,采用与之前相同的过程,但是得到的结果图像比课本的结果图更加地模糊。k = 0.0025(较模糊,比较容易看出区别)的情况如下:


这个问题困扰了我很久,我尝试了各种不同的方法,在不中心变换的情况下进行滤波,发现情况更加糟糕。后来在做后面运动模糊模型的时候,得到的结果也与课本的结果相差甚远。之后,在尝试了不对图像进行填充(即不对原图像填充0值至大小为[2m, 2n]),发现得到的结果与课本的一致。对得到的结果图像直接取整(若是在最开始将值归一化到[0,1],自然不需要取整这一步),没有归一化到[0, 255]则与课本的结果一致。代码执行结果如下(同样是k = 0.0025的情况):


代码如下:

大气湍流实现函数为atmoTurbulence,输入为初始图像和大气湍流模型的系数k,输出为进行滤波之后的图像,下面给出的代码为了与课本的结果保持一致,没有在开始的时候对原图像进行填充,但结果仍然归一化到了[0, 255]。

function [image_out, g] = atmoTurbulence(image_in, k)
% 模拟受大气湍流影响得到的图像
% 输入为初始灰度图像,大气湍流模型的系数k
% 输出为受到大气湍流影响的结果图像
% 该实现方法没有对原图像进行填充。

[m, n] = size(image_in);
fp = zeros(m, n);
% 中心化
for i = 1 : m
    for j = 1 : n
        fp(i, j) = double(image_in(i,j)) * (-1)^(i+j);
    end
end
% 傅里叶变换
F1 = fft2(fp);
% 变换中心
p = m / 2 + 1.0;
q = n / 2 + 1.0;
% 生成大气湍流模型函数
H = zeros(m, n);
for u = 1 : m
    for v = 1 : n
        temp1 = (u-p)^2+(v-q)^2;
        H(u,v) = exp((-k)*(temp1^(5/6)));
    end
end
% 滤波
G = H .* F1;
% 反傅里叶变换,并取实部
gp = real(ifft2(G));
% 反中心化

g = zeros(m, n);
for i = 1 : m
    for j = 1 : n
        g(i, j) = gp(i, j) * (-1)^(i+j);
    end
end
% 归一化输出图像到[0, 255],g取uint8的结果与课本一致
image_out = zeros(m, n, 'uint8');
mmax = max(g(:));
mmin = min(g(:));
range = mmax-mmin;
for i = 1 : m
    for j = 1 : n
        image_out(i,j) = uint8(255 * (g(i, j)-mmin) / range);
    end
end

end

测试代码就不给出了,与之前的代码对函数的调用方法一致。

运动模糊模型:

退化函数为

其中T表示曝光时间,a和b分别表示水平和垂直方向上的移动量。注意有,当π(ua+vb) = 0时,H(u,v) = T。同理,在实现该滤波器的过程中,由于中心化,要用u-M/2和v-N/2分别替换u和v。

当a = b  = 0.1,T = 1时,其傅里叶频谱如下:

imshow(log(abs(H) + 1), [])


在对图像进行运动模糊退化之后,由于图像的运动,图像的尺寸与位置会发生一些的变化。在取a = b = 0.1,T = 1的情况下,不知道应该裁剪的数值,我直接显示了不进行裁剪的图像(由于对原图像填充0至图像大小为[2m, 2n],在最后的结果需要裁剪),如下所示。但是,发现对图像进行裁剪之后,与课本给出的图像相差很大。


课本给出的结果如下:


经过对课本图片的仔细观察,发现图片的左边和上边应该输入右边和下边移动过来的。因此猜测课本的图片应该是没有对原图像进行填0扩充得到的。修改代码,得到的结果如下:


代码如下:

clear all;
clc;
close all;

image = imread('7.tif'); % 原图

[m, n] = size(image);
P = m / 2 + 1.0;
Q = n / 2 + 1.0;
fp = zeros(m, n);
%对图像乘以(-1)^(x+y) 以移到变换中心
for i = 1 : m
    for j = 1 : n
        % fp(i, j) = double(image(i, j));
        fp(i, j) = double(image(i, j)) * (-1)^(i+j);
    end
end
% 对填充后的图像进行傅里叶变换
F1 = fft2(fp);

a = 0.1;
b = 0.1;
T = 1;

% 生成运动模型函数,中心在(P,Q)
Mo = zeros(m, n);
for u = 1 : m
    for v = 1 : n
        temp1 = pi * ((u-P)*a + (v-Q)*b);
        if (temp1 == 0)
            Mo(u,v) = T;
        else
            Mo(u, v) =  T * sin(temp1) / temp1 * exp(-1i * (temp1));
        end
    end
end
%进行滤波
G = F1 .* Mo;

% 反傅里叶变换
gp = ifft2(G);

% 处理得到的图像
image_out = zeros(m, n, 'uint8');
gp = real(gp);
g = zeros(m, n);
for i = 1 : m
    for j = 1 : n
        g(i, j) = gp(i, j) * (-1)^(i+j);
    end
end
mmax = max(g(:));
mmin = min(g(:));
range = mmax-mmin;
for i = 1 : m
    for j = 1 : n
        image_out(i,j) = uint8(255 * (g(i, j)-mmin) / range);
    end
end
imshow(image_out);

三、逆滤波

1. 直接逆滤波

知道了图像的退化模型之后,最简单的复原方法就是采用逆滤波的方法。计算如下:

                                         

但是,当H(u,v)为0或者接近0的时候,N(u,v)/H(u,v)会变得很大,成为支配整个图像的主要部分。即使N(u,v)很小或者为0,当H(u,v)接近0的时候,在计算的时候,F(u,v)也会变得非常大,从而使复原之后的图像没有任何信息。

因此,可以对H(u,v)进行修改,①可以对G(u,v)/H(u,v)应用一个低通滤波器,虑去其中病态的高频成分(即虑去H(u,v)中接近0的部分),②或者规定一个值,当|H(u,v)| ≤ δ 时,1/H(u,v) = 0。这两种方法都是去掉或者说削弱H(u,v)接近0时的影响。低通滤波器的方法对于上面提到的运动模糊模型几乎没有用,因为运动模糊模型的傅里叶频谱并不是从中间向四周赋值逐渐减小的,但是方法②仍然有用。

我在对收到了大气湍流模型之后的图像做直接逆滤波的时候,得到的最终图片一片模糊,得不到任何信息,与课本的结果相差较大,这可能是在对计算G(u,v)/H(u,v)的时候,在H(u,v)接近0的时候所做的处理不一致所导致的。这个直接造成了在之后对G(u,v)/H(u,v)使用butterworth低通滤波器的时候,最佳效果的截止频率与课本的不一致。

2. 维纳滤波(最小均方差误差滤波)

一个维纳滤波的计算公式如下,其中K是一个特定的常数,与噪声和未退化图像之间的信噪比有关。不同情况下取值不同。在平均意义下是最优的。


3. 约束最小二乘方滤波器 

,其中r是一个参数,P(u,y)是矩阵p(x,y) = [0, -1, 0; -1, 4,-1; 0, -1, 0]的傅里叶变换。该算法相比于维纳滤波,对其应用的每幅图像都能产生最优的结果。

4. 代码实现

下面给出在不填充图片的情况下,利用运动模型对图片进行模糊(a = b = 0.1, T = 1),添加高斯噪声(均值为0,方差为500),对有噪声的运动模糊图像直接使用逆滤波,使用维纳滤波(经过试验,k取0.02较好),使用约束最小二乘方滤波(经过试验,r取0.5较好)得到的结果。

代码如下(下面的代码再进行傅里叶变换之前没有对图像进行填充):

clear all;
close all;
clc;

image = imread('7.tif');
[m, n] = size(image);
% 参数如下:
% p,q为频率中心,a,b,T为运动模糊参数,
% k为维纳滤波参数, r为约束最小二乘方参数
% M,V 分别为高斯噪声的均值和方差
p = m / 2 + 1.0;
q = n / 2 + 1.0;
a = 0.1;
b = 0.1;
T = 1;
k = 0.05;
r = 0.5;
M = 0;
V = 500;

% 对原图像进行傅里叶变换以及中心化
fp = double(image);
F = fftshift(fft2(fp));

% 生成运动模型的傅里叶变换,中心在(p,q)
Mo = zeros(m, n);
for u = 1 : m
    for v = 1 : n
        temp = pi * ((u-p)*a + (v-q)*b);
        if (temp == 0)
            Mo(u,v) = T;
        else
            Mo(u, v) =  T * sin(temp) / temp * exp(-1i * (temp));
        end
    end
end

% 生成维纳滤波的傅里叶变换
Wiener = (abs(Mo).^2) ./ (abs(Mo).^2 + k) ./ Mo;

% 生成约束最小二乘方滤波的傅里叶变换
lp = [0, -1, 0; -1, 4, -1; 0, -1, 0];
Flp = fftshift(fft2(lp, m, n));
Hw = conj(Mo) ./ (abs(Mo).^2 + r * abs(Flp).^2);

% 生成高斯噪声的傅里叶变换
noise = 500^0.5 * randn([m, n]);
Fn = fftshift(fft2(noise));

% 运动模糊图像,并且加上高斯噪声
image1 = zeros(m, n, 'uint8');
G1 = F .* Mo + Fn;
gp1 = ifft2(fftshift(G1));
g1 = real(gp1);
% 归一化图像到 [0, 255];
mmax = max(g1(:));
mmin = min(g1(:));
range = mmax-mmin;
for i = 1 : m
    for j = 1 : n
        image1(i,j) = uint8(255 * (g1(i, j)-mmin) / range);
    end
end

% 为了接近真实情况,对归一化之后的加噪图像进行逆滤波
F2 = fftshift(fft2(image1));
% 直接逆滤波
G2 = F2 ./ Mo;
gp2 = ifftshift(G2);
g2 = real(gp2);

% 维纳滤波
G3 = F2 .* Wiener;
gp3 = ifft2(fftshift(G3));
g3 = real(gp3);

% 约束最小二乘方滤波
G4 = F2 .* Hw;
gp4 = ifft2(fftshift(G4));
g4 = real(gp4);
subplot(2,3,1), imshow(image), title('原图');
subplot(2,3,2), imshow(image1), title('运动加噪图像');
subplot(2,3,3), imshow(g2, []), title('直接逆滤波');
subplot(2,3,4), imshow(g3, []), title('维纳滤波');
subplot(2,3,5), imshow(g4, []), title('约束最小二乘方滤波');
执行结果如下:


2018-12-25 11:13:13 weixin_41213648 阅读数 22463


数学建模感想

纪念逝去的大学数学建模:两次校赛,两次国赛,两次美赛,一次电工杯。从大一下学期组队到现在,大三下学期,时间飞逝,我的大学建模生涯也告一段落。感谢建模路上帮助过我的学长和学姐们,滴水之恩当涌泉相报,写下这篇感想,希望可以给学弟学妹们一丝启发,也就完成我的想法了。拙劣的文笔,也不知道写些啥,按顺序随便写写吧。

我是怎么选择建模的:

大一上,第一次听到数学建模其实是大一上学期,not大一下学期。某次浏览网页偶然发现的,源于从小对数学,哲学以及历史的崇敬吧(虽然大学没敢选择其中任何一个专业,尤其是数学和哲学,怕太难了,学不好),我就坚定了学习数学建模的想法。通过翻阅学校发的学生手册还是神马的资料,发现我们学校有数学建模竞赛的。鉴于大一上啥数学知识都没有,也就没开始准备,把侧重点放在找队友上。
一次打乒乓球,认识了两位信电帅哥,以后也会一起打球。其中一位(M)很有学霸潜质,后来期末考试后,我打听了他的高数成绩,果然的杠杠滴,就试探性的问了下,要不要一起参加建模,嗯,成功!

第二位队友是在大一上学期认识的(向她请教了很多关于转专业的事情),但是是第二学期找她组队的。老样子,打听成绩,一打听吓一跳,是英语超好,微积分接近满分的女生F(鄙人第二学期转入了她的学院)。果断发送邀请,是否愿意一起组队,嗯,成功。

关于找队友:在信息不对称的情况下,优先考虑三人的专业搭配,比如或信电的小伙伴负责编程和理工科题建模,经济金融统计负责论文和统计建模,数学计算专业的全方位建模以及帮忙论文,个人感觉这样子比较好。由于建模粗略地可以分为建模,编程,论文,三块,整体上是一人负责一块的,但是绝对不能走极端,每个人就单单的负责一块,这样子的组合缺乏沟通和互动。应该要在培训中磨合,结合每个人的个人特点。主要负责哪几块,辅助哪几块。

接下来就到了第一次校赛了:第一次还是挺激动的,因为之前问了几个学长学姐说,建模都是要通宵的,于是我们也做好了通宵的准备。第一次拿到的题目是关于一个单位不同工作部门不同饮食习惯的人,健康水平的关系。
后来回顾过来,这其实是一个比较简单的统计分析题。但是想当年可没有这等觉悟,做题全靠office,对着题目想半天也不知道该怎么做。做的过程很痛苦,但是也很兴奋,校赛三等奖的结果证明了光有一股热情是不行的,需要恶补大量知识。

推荐新手入门书目:

数学模型(姜启源、谢金星)

数学建模方法与分析.(新西兰)Mark.M.Meerschaert.

第一本是姜老先生写的,很适合新手,在内容编排上也是国产风格,按模型知识点分类,一块一块讲,面面俱到。第二本是新西兰的,我是大二的时候看这本书的,只看了前面一部分。发现这本书挺适合新手,它是典型的外国教材风格,从一个模型例子开始,娓娓道来,跟你讲述数学建模的方方面面,其中反复强调的一个数学建模五步法,后来细细体会起来的确很有道理,看完大部分这本书的内容,就可以体会并应用这个方法了。(第一次校赛,就是因为五步法的第一步,都没有做到)。对了,还有老丁推荐的一本,美利坚合众国数学建模竞赛委员会主席Giordano写的A first course in mathematic modeling,有姜启源等翻译的中文版,but我没能在图书馆借到,所以没看过,大家有机会可以看看。

怎么建模

第一次国赛前的放假开始学校培训,我提前借了一大堆书,把卡都借满了。第一次国赛前的那次培训,对我而言,这段时期是收获最大的时期,比其他任何时间段都来得大。

这段时间内,我们三个人都很辛苦。白天培训要学习很多知识,完了只能休息半天,然后开始比赛,周而复始。 之前我的打算是,白天上课学习,晚上回去复习当天的内容,再看些其他东西。But 我太高估自己了,晚上基本是玩玩三国杀之类的小游戏放松,然后第二天再去上课。嗯,心态放好,身体最重要。^_^

通过这几次培训,基本上队伍形成了F专业写论文,我和M负责建模和编程。其中我偏重建模和全队调度。

大家在培训的时候,要慢慢养成五步建模法:

五步法说明:

 

第一步:提出问题.

大家可能会想,题目不是已经给出问题了吗? 是的,但是这里的提出问题是指:用数学语言去表达。首先,题目一定要通读若干遍,“看不懂,读题目;看不懂,读题目”,如此反复循环的同时查阅相关资料。这通常需要大量的工作,而且要根据题目的特点做一些假设。

看的差不多了,就开始用数学形式提出问题,当然,在这之前,先引用或者定义一些专业术语。 接下来进行符号说明,统一符号(这点很重要,三个人之间便于沟通,论文便于展现),并列出整个问题涉及的变量,包括恰当的单位,列出我们已知或者作出的假设(用数学语言描述,比如等式,不等式)。 做完这些准备工作后,就开始正式提出问题啦。用明确的数学语言写出这个问题的表达式,加上之前的准备工作,就构成了完整的问题。

这部分的内容反映到论文结构上,相当于前言,问题提出,模型建立部分。注意,刚开始建立的模型很挫没关系,我们随时可以返回来进行修改的。

第二步:选择建模方法.

在有了用数学语言表述的问题后,我们需要选择一个或者多个数学方法来获得解。 许多问题,尤其是运筹优化,微分方程的题目,一般都可以表述成一个已有有效的标准求解形式。这里可以通过查阅相关领域的文献,获得具体的方法。为什么不是查阅教材呢?基本上教材讲的都是基础的,针对特定问题的,教材上一般找不到现成的方法,但是教材依然是很重要的基础工具,有时候想不出思路,教材(比如姜启源那本)翻来翻去,会产生灵感,可以用什么模型。

第三步:推导模型的公式.

我们要把第二步的方法实现出来,也就是论文的模型建立部分。我们要对建立的问题进行变形,推导,转化为可以运行标准方法解答的形式。这部分通常是借鉴参考文献的过程,做一些修改,以适应本题的情况。

第四步:求解模型.

这里是编程的队友登场的时刻了。

统计模型:SPSS,Eviews,Stata ,都是菜单式操作,easy的。

数据分析:R,数据库SQL Server,IBM
DB2

微分方程:Maple,Mathematic,MATLAB

运筹规划:Matlab,Lingo

智能算法:Matlab,R

时间序列:统计模型中的那些软件,或者R,Matlab

图像处理:Matlab,C++

总结: Matlab是必须的,再来个SPSS,一般情况下够用了。

第五步:回答问题.

也就是论文的讨论部分。这部分是对你整篇论文成果的总结,一定要写的有深度。除此之外,通常还要写上一些灵敏度分析,如果是统计模型的话,要有模型检验。论文通常会需要画一些图表,可以使用Matlab、R等软件来画跟数据有关的图,使用Visio或者PPT画流程图之类的图。

 

关于比赛的一些个人体会

1、国赛和美赛是有区别的

国赛讲究实力,美赛讲究创新。 美赛不一定要多高级的方法,但是一定要有创意。而国赛,组委会往往是有一个模糊的“标准答案”在的,按部就班做下来就好了。

注意不要一次性就建立复杂模型了,老外看重的是你的思维,你的逻辑,不像国赛,看重的是你的建模编程实力,要使用各种高大上的方法。

拿到一个问题,可以先建立一个初等模型,讨论下结果;再逐渐放宽条件,把模型做的复杂一点。
即 Basic model -> Normal model -> Extended model的思路。这个思维在美赛中很好,这么做下来基本都能得金奖的,鄙人这次也是按照这样的流程,拿了个金奖。

2、文献为王

文献为王。建模的题目,基本上是某个教授的研究课题,凭我们本科生的水平,基本上做不到对题目的深刻理解。所以要多看文献。

看文献也有技巧:刚拿到题目,先查一下相关背景资料,了解题目是哪方面的。接下来看文献,找一下硕士论文,博士论文以及综述性质的文章,硕博论文一般都会详细介绍下整个课题的国内外研究情况,综述就更不用说了,它就是对大量原始研究论文的数据、资料和主要观点进行归纳整理、分析提炼而写成的论文。看完这些,就可以比较有深度地把握题目,也知道如果我们要进行创新的话,往哪方面走。

接下来,可以根据小组三人讨论的结果,有针对性的看一下有深度的文献,文献看得多了,就可以考虑开始创新了,像爱因斯坦那样开辟相对论等新领域的创新,是很有难度的,但是我们可以退而取其次,不是有句话叫做“他山之石,可以攻玉”吗?
我们要做的就是组合创新! 领域内组合创新,把一个学者的方法嫁接到另一个学者的模型上。 以及交叉领域创新,把把自然科学的知识用到社会科学上,或者用社会科学解释自然科学的结果等等。(这里就可以体现,跨专业建模队伍的先天优势了:不同专业对同一个问题的思维是不同的,可以擦出创意的火花)

PS:图书馆有买很多数据库,可以免费看论文。免费的话google学术是无敌的,国内文献貌似没有良好的分享平台,实在找不到论文也可以百度文库死马当活马医。

平时可以多注册一些网站,数学中国,校苑数模,matlab技术论坛,pudn程序员,研学论坛,stackoverflow等。上传些资料,攒积分要从娃娃抓起,不要等到比赛了看到好资料还“诶呀,积分不够”。

想法很重要。建模思维是一种很难学习到的东西,站在巨人的肩膀上,多看文献,负责建模的同学辛苦了。

3、掌握一点数据处理的技巧

建模的题目,A.B两道题。基本上是一题连续,一题离散;一题自然科学(理工科),另一题社会科学(经济管理)。这样的分布的,大家平常做题的时候就可以有所侧重,曾经有一支美帝的队伍,专攻离散题,貌似拿了连续两届的outstanding.

掌握一点数据处理的技巧是很有必要的。比如数据缺失值的处理,插值与拟合等。尤其是数据缺失值的处理,基本上A,B题都有可能涉及,建议熟练掌握。

4、关于编程水平

More generally,软件操作水平几乎决定了一个队伍的结果上限。MATLAB是必备的,必须要熟练掌握各种模型的实现。此外,SPSS(或者R)也是要掌握的。Mathematic和MATLAB的替代性很强,不掌握也没关系(仅在建模方面,mathematic 当然也是很强大的)。What’s more建模比赛举办这么多年,用到lingo的情况几乎很少了,也可以不学lingo. And 现在的题目动不动就要粒子群等智能算法,强烈建议大家至少熟练掌握一种智能算法.

MATLAB推荐书目

基础:

MATLAB揭秘 郑碧波 译 (本书讲的极其通俗易懂,适合无编程经验的)

精通matlab2011a 张志涌

提升:

数学建模与应用:司守奎 (囊括了各类建模的知识,还附有代码,很难得,工具书性质的)

Matlab智能算法30个案例分析 史峰,王辉等

《MATLAB统计分析与应用:40个案例分析》

数字图像处理(MATLAB版) 冈萨雷斯 (13国赛碎纸片复原居然涉及了图像处理,所以列在这里了.可看可不看,太专业化了)

书很多的.总之,要达到熟练运用matlab进行运筹优化,数据处理,微分方程的地步. 数理统计可以交给SPSS,R ,其中SPSS无脑操作上手快.

5、格式规范:

看国赛一等奖,美赛国内人得特等奖的论文,格式规范方面绝对很到位,大家可以参考。国外人的特等奖论文,大都不重视格式,人家的优势在于模型实力与创意、母语写作。所以在美赛格式规范方面,参考国内特奖的论文。

PS:有时间的队伍可以学习以下Latex,用Latex写出来的论文,比word不知道好了多少倍。Latex书目推荐:

LaTeX插图指南

一份不太简短的Latex介绍

LaTeX-表格的制作 汤银才

参考文献常见问题集

latex学习日记 Alpha Huang

论坛:Ctex BBS

结束语:

什么是数学的思维方式?观察客观世界的现象,抓住其主要特征,抽象出概念或者建立模型;进行探索,通过直觉判断或者归纳推理,类比推理以及联想等作出猜测;然后进行深入分析和逻辑推理以及计算,揭示事物的内在规律,从而使纷繁复杂的现象变得井然有序。这就是数学的思维方式。

-----------丘维声《抽象代数基础》前言

 

PS:转载到学校等教育机构,给学弟学妹们学习是可以的,注明作者跟来处。如果是出于任何商业目的,比如用作微信公众号文章、媒体稿件、软文文案、营销型微博账号,不允许,或者应该主动提出愿意为之付出的稿费。

 

前言  
    建模给我带来的是什么?
组建你的团队
    1、专业合适即可
    2、协作是关键
    3、建模、实现、写作
准备你的工具
    软件的准备
        1、论文的写作
        2、公式编辑器
        3、插图制作
        4、论文版本控制器
        5、团队资料笔记共享
        6、善用搜索引擎
    一些实用的网站
做好知识储备
    建模前推荐看那些书
    基本模型和算法
    基本的数据处理方法
    有必要了解的些学科知识

前言

写下这些文字,希望我在数学建模上的经验能帮助各位。2017年11月4日更新。

 

建模给我带来的是什么?

1、简历上的更新。

参加2016年国赛获得省一等奖,获得省一是比较容易的,可能相对国奖含金量不高。参加2016年参加美赛获得M奖,美赛的奖项有:Outstanding Winner(1%)、Finalist(1%)、Meritorous Winner(9%)、Honoralbe Mention(31)、Successful Participant(57%)。一般上只要提交了文章至少能获得成功参赛奖,国内美名其曰三等奖。在我看来参赛稍微用心获得H和M奖也是相对比较容易的,含金量最高的还是O奖。

2、个人技能的实际提升。

能够熟练的使用 Matlab、Python、Mathematica 编程解决实际问题,能够使用 Word、LaTex 写规范的论文,懂得团队之间的高效协作,可以使用 PPT、PS 等绘制所需的图片素材、信息检索能力大大提升等等。

3、认知态度的改变。

答主在参赛的时候就读的专业是计算数学,属于专业数学学科。大一大二在数院学习的感觉是不轻松,时常质疑学这些有什么用?例如高等代数,常微分方法,离散数学,偏微分方程等等,后来误打误撞参加了国赛和美赛才发现解决实际问题的基础就是这些平时看作生涩难懂的内容。建模竞赛其实也是一次学科的交叉竞赛,各个学科各有自己的优势,把自己的专业知识学好在建模时也就有了解决问题的基本能力。

组建你的团队

建模的第一步就是组建自己的团队。很多人在组队问题上有着一些观念上的偏执:

  • 专业要不同:理工管搭配
  • 男女比例协调
  • 明确分工:建模、编程、写作

就以上三点说说我自己的看法。

 

①. 专业合适即可

专业并非会对建模起到至关重要的作用,真正起作用的是作为建模人的你。自己对本专业知识的掌握程度,对高等数学、线性代数、微积分的学习是否用心了。其实在初等的建模中也并不会过多地涉及到这些内容,当然好的模型对这些知识的要求是必须的。踏踏实实、靠谱细心才会出成果。

 

②. 协作是关键

俗话说男女搭配干活不累,但是累不累不还得看你是否有个能干的队友吗?通力合作,有默契的队伍才会有动力在比赛中坚持下去。小组内互相认识、互相了解才会在最累的时候互相支持。一个队伍需要的是你认可的凝聚力,而不是有一个人专门端茶倒水。

 

③.建模、实现、写作

团队分工至关重要。我的理解团队分工应该是模型搭建、模型实现、论文写作这三个部分。建模是提供团队对问题的解决思路、方法;参与实现模型或者求解模型必须要求能熟练的通过各类软件对模型进行模拟、求解、检验;写作要求能对团队的前进方向有清晰的把握,通过准确的文字、图标对模型进行展示。

但是实际中的分工并不是界限分明,数学建模是一个团队合作的过程,分工固然重要但是明确的分工界限容易限制建模的进度,禁锢思路。我认为在建模中的分工一定要有交叉,建模的同学也需要把自己理解的通过文字、公式准确的表达给写作的同学,负责模型的同学实现部分也要对模型的实现的最终结果有较好的可视化功底。

每个人都应该具备基本的建模、模型实现、写作能力但是每个人的侧重点不同才是绝佳的组合。

准备你的工具
这部分主要谈谈使用哪些软件,包括编程工具、写作工具、绘图工具等,以及如何进行合作。

软件的准备

工欲善其事,必先利其器。软件列表参考如下:

  • - 编程工具(Matlab / Python / Mathematica )
  • - 统计建模(R / SPSS / Minitab)
  • - 论文写作(Word / LaTex)
  • - 公式编辑器(MathType)
  • - 插图制作(PowerPoint / PS)
  • - 流程图绘制(Visio)
  • - 版本控制器(SVN / Git)
  • - 团队资料笔记共享(有道云笔记)

给出的参考软件只是个人建议,如果你有你擅长的工具也请务必使用自己擅长的,在学习成本和收益之间衡量下,自己是不是有足够的精力接触、学习新的软件,是否能用好它。

 

1、论文的写作

Word可能我们再熟悉不过了,但可能这种熟悉只限于时常听闻、把Word当做记事本等,但是你真的能熟练使用它的基本功能吗?例如,插入图片的版式之间的区别、页眉页脚的设置、段落行间距段前断后的距离,分栏等等。在图、公式、表格较多的论文上,排版稍不留意就会造成的混乱。图片的嵌入方式、表格的样式、公式图表的引用等等都是比较容易忽视的问题。如果能够熟练掌握Word它就是你手上的排版利器。

现在有另一种选择,开始使用LaTex。把LaTex形容成一门“编程语言”我想是合适的,一行特定的字符对应着一个特定的样式,将样式进行组合就有了一个精美的模板。你要做的只是学习一些基本的语法,对模板进行填充就行了。Latex的一个缺点是不能实时预览,必须进行编译才能看到你的内容。
另外,国赛的模板[1]你可以从http://www.latexstudio.net/archives/4253下载,美赛的模板[2]http://www.ctan.org/pkg/mcmthesis下载.。

 

2、插图制作

选择 PowerPoint 制作插图的原因,一方面是PPT的强大自定义形状功能,或者说式是 Office 系列自带的,PPT只是比较便于管理。,另一方面是自己对 PPT 的使用也较为熟练。PPT 的技能提升可以去阅读下秋叶老师的三分钟教程,在百度阅读_正版电子书在线阅读中搜索关键字“秋叶PPT-三分钟教程”即可。

 

 

3、论文版本控制器

 

SVN是一个代码版本控制器,简单描述SVN到底能做什么:它可以将你每一次的修改内容,对差异进行统计,同时你也可以随时恢复到过去相应版本。如果遇到多人操作了同一文件,SVN会自动整合在一起,如果改到了某个部分,会提醒解决冲突的地方。

我们要做的是协作把论文写好,很多人包括我在内起初都是在制定好的模板上,每个人各自填充自己负责的部分最后再汇总,期间更有的是论文命名版本从版本1到N。或者还有同学只用一份论文文件,同时修改论文最多只能是一个人。这样的低效率你能忍吗?

我的建议是,在讨论论文如何编写的时候分清有几个部分、每个部分该写哪些内容、谁负责哪些部分,然后将每个部分独立成一个空白文档,这些文件组成了一个主分支提交到服务器上,小组成员再利用SVN对其“检出”到本地,每个人在修改完各自的部分后再“提交”到服务器,其他成员“更新”本地文件即可。具体要怎么操作SVN请到搜索引擎上搜索相关内容。

可能我以上所讲的东西你根本不能理解,没关系慢慢你就知道了:)

 

4、团队资料笔记共享

比较了几款笔记软件,如印象笔记、为知笔记、有道云笔。都使用了一段时间,印象笔记个人比较喜欢用它来归档纸质的文档,以及一些日常的笔记,至于团队合作上我还是比较喜欢使用有道云笔记。

这不是广告

有道云笔记的云协作可以给建模过程中的交流、文件共享带来极大的便利。但你可能也会说我可以用QQ群为什么要用这个软件。很重要的一点是有道云笔记有可视化的版本控制功能,之前用过QQ群的都知道,假如我上传了一个文件,下次再上传修改过的该文件你相信每个人都能保证用的是这个新文件吗?

另外有道云笔记还支持在线预览pdf、word、txt文件,创建共享笔记(支持markdown)。有个值得分享的经验,组长在进度规划时可以以共享笔记的方式建立TODO列表,每半天在笔记中发布每个人应该完成的任务或应该解决的部分以及最迟时间,当任务完成时修改此笔记,利用删除线划去该字段。时间的控制在建模比赛过程也是很重要的!

5、善用搜索引擎【等待完善】

搜索文献时建议直接使用 Google 搜索。下面给出几个当时比较常用的几个网站:

实用站点
【数模知识库】http://www.shumo.com/wiki/doku.php?id=start
【国赛官网】http://www.mcm.edu.cn/
【美赛官网】http://www.comap.com/
【美赛中文】http://www.mcmbooks.net/

论坛
【数学中国】http://www.madio.net/forum.php
【校苑数模】http://www.mathor.com/mcm.php
【数学建模与统计建模论坛】http://www.mathsccnu.com/forum.php
【MATLAB技术论坛】http://www.matlabsky.com/

源码
【源码搜搜】http://www.codesoso.net/
【Pudn】http://www.pudn.com/
【Wolfram】http://demonstrations.wolfram.com/index.html
【WolframAlpha】http://www.wolframalpha.com/

文献
【谷歌学术】https://scholar.google.com/
【百度学术】http://xueshu.baidu.com/
【中国知网】http://www.cnki.net/
【万方数据】http://www.wanfangdata.com.cn/
【维普网】http://www.cqvip.com/
【Web of Science】https://www.webofknowledge.com/
【PubMed】https://www.ncbi.nlm.nih.gov/pubmed/
【ScienceDirect】http://www.sciencedirect.com/

工具

【英文修改】1Checker - Proofreading, Grammar Check, Smart Text Enrichment | for FREE

【国家数据】http://data.stats.gov.cn/

【书籍下载】Science Library - 一个开放、自由的书籍分享站

【外文书籍】PDF Drive - Search and download PDF files for free.

做好知识储备

建模前推荐看那些书

如果一定要给关于建模的参考书做个分类的话我会分成两类:基础类、工具类

基础类书籍罗列了绝大部分基础数学模型,并有实际的问题分析建模求解;工具类主要是从数学软件(MATLAB等)的实践开始,给出问题的分析以及如何用软件求解模型,或者对模型该如何进行模拟。

下面就不做细致分类了直接贴出我曾经真真实实用过的书

《数学模型》- 姜启源
数学建模入门教材,学校建模培训时就主要以这本书为参考书。大致模型有哪些应该熟悉一下。

《数学建模竞赛入门与提高》- 周凯 , 宋军全, 邬学军
有模型有代码可操作行强

《MATLAB在数学建模中的应用》- 卓金武
MATLAB能力提高必看

《数学建模竞赛:获奖论文精选与点评》- 韩中庚
一定要多看多学习优秀的论文

《MATLAB智能算法30个案例分析》- 王小川, 史峰, 郁磊 
算法一定要学透千万不能一知半解就拿来用

《MATLAB神经网络43个案例分析》- 王小川, 史峰, 郁磊 
人工智能算法的一类,一定要参透思想再用这个很关键

《数学建模与数学实验》- 汪晓银 (编者), 周保平 (编者)
MATLAB入门学习推荐

另外更新我现在参考的几本最优化、机器学习、数据挖掘、计算方法的书:

《机器学习》 - 周志华

《统计学习方法》 - 李航

《最优化理论与方法》 - 袁亚湘

《最优化原理》 - 胡适耕

《凸优化(中译)》 - Stephen Boyd

《凸优化算法(英文)》 - Dimitri P.Bertsekas

《Introduction to Numerical Analysis(英文)》- J.Stoer,R.Bulirsch

《数据挖掘导论(中译)》 - Michael SteinBach

 

另外不再提供任何电子版的资源,数学建模不是一场资源搜罗竞赛,更坏者变相买卖资源,知乎上已经这样助长歪风邪气了,尊重版权,珍惜时间,现在就拿起一本书开始学习吧!

 

基本模型和算法

 

 

 赛前梳理的基本模型可以参考一下。

 

一、优化类

线性规划(运输问题、指派问题、对偶理论、灵敏度分析)
整数规划(分支定界、枚举试探、蒙特卡洛)
非线性规划(约束极值、无约束极值)
目标规划(单目标、多目标)
动态规划(动态、静态、线性动规、区域动规、树形动规、背包动规)
动态优化(变分法)
现代优化算法(贪婪算法、禁忌搜索、模拟退火、遗传算法、人工神经网络、蚁群算法、粒子群算法、人群搜索算法、人工免疫算法、集成算法、TSP问题、QAP问题、JSP问题)
模糊逼近算法

二、图论

最小生成树(prim算法、Kruskal算法)
最短路径(Dijkstra算法、Floyd-Warshall算法、Bellman-Ford算法、SPFA算法)
匹配问题(匈牙利算法)
Euler图和Hamilton图
网络流(最大流问题、最小费用最大流问题)

三&四、预测类&统计

GM(1,1)灰度预测
时间序列模型(确定性时间序列、平稳时间序列、移动平均、指数平滑、Winter方法、ARIMA模型)
回归(一元线性回归、多元线性回归MLR、非线性回归、多元逐步回归MSR、主元回归法PCR、部分最小二乘回归法PLSR)(重点)
Bayes统计预测
分类模型(逻辑回归、决策树、神经网络)
判别分析模型(距离判别、Fisher判别、Bayes判别)
参数估计(点估计、极大似然估计、Bayes估计)
假设检验(U-检验、T-检验、卡方检验、F-检验、最优性检验、分布拟合检验)
方差分析(单因素、多因素、相关性检验)
经验分布函数
正交试验
模糊数学(模糊分类、模糊决策)
随机森林

五、数据处理

图像处理
插值与拟合(Lagrange插值、Newton插值、Hermite插值、三次样条插值、线性最小二乘)
搜索算法(回溯、分治、排序、网格、穷举)
数值分析方法(方程组求解、矩阵运算、数值积分、逐次逼近法、牛顿迭代法)
模糊逼近
动态加权
ES
DWRR
序列分析
主成分分析
因子分析
聚类分析
灰色关联分析法
数据包络分析法(DEA)

六、评价类

层次分析法(AHP)
模糊综合评价
基于层次分析的模糊综合评价
动态加权综合评价
TEIZ理论

七、图形类(重点)
算法流程图
条形图
直方图
散点图
饼图
折线图
茎叶图
箱线图
P_P图
Q_Q图
Venn图
矢量图
误差分析图
概率分布图
5w1h分析法
漏斗模型
金字塔模型
鱼骨分析法
等高线曲面图
思维导图

八、模拟与仿真

蒙特卡洛
元胞自动机

九、方程(进阶)

微分方程(Malthus人口模型、Logistic模型、战争模型)
稳定状态模型(Volterra 模型)
常微分方程的解法(离散化、Euler方法、Runge—Kutta方法、线性多步法)
差分方程(蛛网模型、遗传模型)
偏微分方程数值解(定解问题、差分解法、有限元分析)

十、数据建模&机器学习方法(当前热点)
(注:此部分与数据处理算法有大量重叠)

云模型
Logistic回归
主成分分析
支持向量机(SVM)
K-均值(K-Means)
近邻法
朴素Bayes判别法

决策树方法
人工神经网络(BP、RBF、Hopfield、SOM)
正则化方法
kernel算法

十一、其他

排队论
博弈论
贮存伦
概率模型
马氏链模型
决策论
(单目标决策:不确定型决策、风险决策、效用函数、决策树、灵敏度分析)
(多目标决策:分层序列法、多目标线性规划、层次分析法)
系统工程建模(ISM解释模型、网络计划模型、系统评价、决策分析)
交叉验证方法(Holdout 验证、K-fold cross-validation、留一验证)

附:简单建模方法

比例关系
函数关系
几何模拟
类比分析
物理规律建模

注:各类别之间方法可能有交叉

 

放上一沓无敌好无敌全无敌清楚的资料(国赛和美赛通用),纯经管小组,无双修,零经验,美赛一等奖。

有网盘里的,数学中国的,我们爱数模的,还有买的网课,不过别忘了去图书馆借几本书(高票推荐的书)系统的看看建模,以我整理的顺序开始分享吧。

谨以此文纪念我的大学建模经历,并且在毕业前夕把我学到的、感悟到的都分享给大家,希望能给大家带去一点点帮助。

 

建模经历: 大学参加了两次国赛,两次美赛。两次国赛赛区一等奖,美赛一等奖。所以,对于打算入门和刚开始接触数学建模的同学来说我还是希望分享一些自己的体悟,希望对你们有用~。~

 

一. 关于建模竞赛、报名和参赛:

这里简要介绍几个比较主流的建模竞赛

(1)全国大学生数学建模竞赛:国赛一般指的是“高教社”杯数学建模竞赛

报名:报名时间可能每个大学不太一样,有的大学要先进行校赛预选,大约是在5-6月开始报名,报名请关注学校相关教务处网站、数学学院网站。报名费300元(有的学校会返还报名费来鼓励大家积极参与,获奖的话说不定学校还会给丰厚的奖金呢~~)。以团队报名,每个队伍不超过3人(所以也可以2人或者1人),每队须有一个指导教师。(关于组队的注意事项后面会详细讲到)

培训:有的学校会在暑假小学期组织建模培训,如果有的话,建议可以去听听~没有培训的话,就自己好好看看呗~

比赛时间:比赛一般在每年9月中上旬举行,比赛时间是从某个周五的上午8:00开始,为期三天三夜,截止到次周一上午8:00。(关于时间的分配我在后面也会详细讲讲)

比赛期间:参赛队伍可以在比赛期间利用图书、互联网资料帮助建模,有问题也可以请教老师,原则上不相互交流(原则上......)。本科组比赛有A,B两道题,需要选择其中一道题进行解答。PS:最后AB两题各个奖项数量相同,所以如果选A,B题的分别有7000,3000只队伍,国赛一等奖A,B题分别有20个名额,那么A题的获奖比例和B题是不同的,但是具体选做的人少的还是选容易的要自己斟酌~(关于换题在后面会讲讲)

比赛提交:提交纸质版给数学学院,并且把论文、数据、程序打包压缩拷贝给相关老师。

比赛答辩:初审进入国赛获奖名单的队伍需要答辩,每个省的初审进度可能不太一样,有的在9月底就会进行答辩,有的可能10月。答辩开始有一个3-5分钟的概要介绍,每个队伍选一个口齿伶俐的小伙伴上去讲就好。答辩的主要目的是验真,所以只要是自己做的应该没多大问题。答辩可能会问到关于模型、软件或者程序的问题。当然答辩也是可能挂掉的,挂掉了就降档。

这里附上一个mcm国赛链接:全国大学生数学建模竞赛www.mcm.edu.cn/(然而这个网址可能并没有很多信息...)

 

(2)美国大学生数学建模竞赛:

报名:美赛报名比国赛复杂一些...这里我先把美赛官网的网址附上,然后我们再慢慢来说

附上美国数模竞赛链接:COMAP: Mathematics Instructional Resources for Innovative Educators

一般在下半年可以开始报名(具体时间忘记了,大约11月左右报名),Contests→Register for Contest(这里需要用指导老师的邮箱来注册,所以需要提前联系老师,确定老师愿意指导,用老师的邮箱号注册,每位老师最多指导2只队伍)。美赛报名费100美元,需要用VISA卡或者MASTER卡支付,如果有队员有当然最好,如果没有就找万能的淘宝吧~

比赛时间:春节前后(这点很悲剧,也阻碍了很多人参赛,但是相信对于那些勇于放弃春节孜孜不倦投身于建模竞赛的同学们还是值得的),比赛时间四天四夜,早上9:00开始。

论文提交:在网上提交,并且寄送纸质版到美国。

没有大便(答辩)!

奖状发放:大概4月左右网上自己下载获奖证书(大陆同学),对,就一个PDF而已...

(3)全国统计建模竞赛:两年一次(单数年),比赛形式是在6月30日前提交论文

(4)电工杯:不熟,sorry

除此之外,还有什么深证杯、认证杯之类的......

 

二.建模竞赛的好处:

理工科的同学就把获奖当成打装备吧,你们懂得,等到快要保研、出国的时候简历上有那么几行还看得过眼的比赛获奖很有用,很有用,很有用(重要的事说三遍)。美赛对出国还是比较有用啦,毕竟还是国际比赛嘛,以前得特等奖的师兄那组去了剑桥大学和斯坦福...虽然特例不代表什么,但是有比没有好撒~

 

三. 组队

建模主要分为建模、编程、论文三个部分,但是要完全分开的你会发现人力资源闲置,所以推荐每位队员主攻其中两项左右。所以建议千万千万不要三个数学学院的同学凑一队!!!(如果三个啥子都会的数学大神凑一起也...没有...关系)。组队的时候大家容易发现每个队都想要至少一个数学学院的,然而通常并没有那么多数院的同学,而且数院的同学爱扎堆...有数学学院的同学是好的,但是其实数学学院的同学比其他学院并没有那么多优势...so,其实我自己觉得电气、软件、计算机的同学更好,建的了模,编的了程序,还写的了论文,卖的了萌...

 

四. 时间分配

常常有师弟师妹我建模要不要熬夜。当然,有不熬夜的也有取得了好成绩的,但是,大部分人需要熬夜。我想建议大家的是要适度地熬夜...比如前两天每天睡7-8个小时,第三天就熬一熬吧。关于时间分配,建模一般从周五早上8点开始,建议大家在中午之前确定好做A题还是B题,分别去看看哪个题更有思路一些,不要拍脑袋决定~选题很重要!选题很重要!选题很重要!一方面是获奖比例,我前面说过了;另一方面,没选好就要涉及到换题,我后面会再说说。吃完午饭最好就把题目确定下来,接下来下午和晚上把第一个问做出来,然后对第二个问开始着手解决。第二天,周六需要把第二问解决,第三问争取基本解决。第三天,完善,如果有第四问要解决第四问。至少在下午4点左右开始集中写论文,当然,其实从第一天解决第一问开始就要开始着手写论文,粘贴数据什么的,谁闲着谁就去写写论文。当然,时间分配要依据不同队伍的进度来,我只是给出一个参考而已~

 

五. 换题

很多同学会遇到“换题危机”,因为周五上午没有选好题,做到一半发现做不动了,就想换题。所以,可以换题,但是建议至少在周六上午之前,不然真的很难完成...

 

六. 论文模板

大家最好入手一本优秀论文集

比如:《数学建模优秀论文精选与点评(2005-2010)》【摘要 书评 试读】

《数学建模系列丛书:全国大学生数学建模竞赛赛题与优秀论文评析(2005年

看看别人的论文层次,我还是给出一个粗略的论文模板:

题目→摘要→模型假设→符号说明→模型的建立→模型的求解→模型评价→仿真测试→模型的推广→参考文献→附录

你可以按照问题一、问题二、问题三分别来写

PS:摘要最重要!摘要最重要!摘要最重要!(阅卷老师和答辩老师的大部分时间在看摘要,所以至少花2个小时左右写那短短的不起眼的摘要)模型评价很重要,你的Model好不好请用数据来说明,回带效果和预测效果都很重要。

 

七. 常用软件和参考书目

常用软件:Matlab, SPSS, Lingo, (SAS, R)

除了上面两本优秀论文外,我还推荐以下书籍:(精选了几本,其实还有很多不过估计应该看不完)

Matlab:用的最多,不解释

SPSS:统计里面用

Lingo:解规划问题,比较简单,就不推荐专门的书了

SAS, R: 统计编程

推荐书目:

《MATLAB 在数学建模中的应用(第2版)》【摘要 书评 试读】

《SPSS统计分析从基础到实践(第2版)(附光盘1张)》(罗应婷)【摘要 书评 试读】

《数学建模算法与应用(附光盘1张)/普通高等院校“十二五”规划教材》(司守奎,孙玺菁)【摘要 书评 试读】

我就不推荐姜启源那种书了...

 

---------------------------------------------分割线------------------------------------------------------------

接下来,我想重点写写数模中常用的算法,但是今天应该是写不完了,所以下次再继续写吧~

八. 算法

下面我开始PO算法,我在这里只介绍一些比较经典的建模算法和程序,也会在后面介绍一些智能算法,边写边总结边回顾也是极好的~

 

个人觉得其实没有必要很系统的学很多数学知识,这是时间和精力不允许的。很多优秀的论文,其高明之处并不是用了多少数学知识,而是思维比较全面、贴合实际、能解决问题或是有所创新。
数学知识

归结起来大体上有以下几类:
1)概率与数理统计,什么拟合了回归分析了
2)运筹学,什么线性规划了
3)微分方程;
其实正式比赛的题目有A题B题,貌似大致规律是一道以离散问题优化,另一道以连续问题微分方程为主。所以有时候自己准备的时候可以有侧重。
还有与计算机知识交叉的知识:计算机模拟或者说数值分析。
假如完全没有学过,或者只学过一点概率与数理统计,微分方程的知识其实也没关系,可以自学啊,能用最简单浅易的数学方法解决了别人用高深理论才能解决的才是最历害的嘛哈哈
计算机知识
其实数学建模还是在于模型,并不是ACM,要多牛X的编程能力。但是一些最基本的还是要回的,matlab,Mathematica等等。程序永远只是辅助你解题的。当然有计算机编程大牛是最好的。其实计算机数据处理,画图啊制表啊还是蛮重要的。
除了以上两种知识,个人觉得还有论文的写作能力和资料搜索能力。
写作能力
数学建模最后交的是论文,文章的书写有比较严格的格式。要清楚地表达自己的想法并不容易,有时一个问题没说清楚就又说另一个问题了。自己以前建模的老师也有参加阅卷的,他们发现格式不行啊,看起来表达不流畅就直接PASS掉了。还有啊那些阅卷老师也都是阅卷前临时培训,他们对题目的理解也很有可能不深的,所以你的论文能否表达清楚就很重要了!
PS:建模阅卷一篇文章一般有两个老师评分,假如同样一篇论文十分制评分,有的老师评9分,有的老师评2分。然后只好pia啦pia啦各种讨论……而且听去阅卷的老师说,这种情况常发生。
资料搜索能力
个人觉得,3个人3天或者4天要解决一个全新的数学建模问题,有时候真的只好现学现用,所以找资料非常重要,能参考前人的思路就参考呗。
关于学习资料
去数学建模论坛上找吧,个人觉得最重要的还是看优秀论文或者自己动手试着做做。

                                            

扫码关注本人微信公众号,有惊喜奥!公众号每天定时发送精致文章!回复关键词可获得海量各类编程开发学习资料!

例如:想获得Python入门至精通学习资料,请回复关键词Python即可。