这是一篇关于暑期数学建模课程的论文,可能有点长和枯燥 ,会浪费大家一点时间。第一次写论文,写的也不是很好,多多指教。
摘要
经过十天的学习,我重新认识了数学建模,以及在解决问题的过程中用到的一些算法,比如说聚类法、梯度下降法等等,和一些常用的软件,如Matlab、Lingo等。数学模型可以描述为:对于现实世界的一个特定对象,为了一个特定目的,根据特有的内在规律,做出一定的必要假设,然后运用恰当的数学工具得到的一个数学结构。如果想要学好数学建模必须学习:高数,线性代数,C语言,还涉及到模糊数学(部分),同时在建模过程中学会MATLAB和lingo等软件的使用。能够培养一个人的开发能力和自主学习能力。
关键词:Matlab/Lingo 算法 数学模型
引言
经过十天的暑期数学建模培训后,我学到了很多东西,认识了很多朋友,也让我进一步的对数学建模有了更清晰的认识和定义。数学建模就是指对于一个现实对象,为了一个特定目的,根据其内在规律,作出必要的简化假设,运用适当的数学工具,得到的一个数学结构,其意义在于用数学方法解决实际问题。当需要从定量的角度分析和研究一个实际问题时,人们就要在深入调查研究、了解对象信息、作出简化假设、分析内在规律等工作的基础上,用数学的符号和语言作表述来建立数学模型。
文献的检索及管理软件
在进行资源查找与获取检索过程时主要分为六个步骤:分析课题→提取主题→选择数据库→检索词检索→比较结果→全文获取。如果要调整检索范围,可以通过调整检索的出版年份、检索领域、数据库、学科分类等来实现。
中文知名数据库:知网、万方、维普、超星等。
可以通过使用搜索引擎获取网络资源,如使用百度学术、谷歌学术、百度、谷歌等。
2. Matlab及Lingo
上午学习到了Matlab的数学运算规则、符号含义、有关变量的使用、一些常见的函数的表达、向量和矩阵的运算、Matlab的程序设计。让我对Matlab有了一个初步且清晰的认识,也掌握了Matlab中的一些基础操作。
下午又学了Lingo,主要为:1、优化模型的基本概念 2、优化问题的建模实例 3、Lingo/Lindo软件简介。
上完课后,我发现Matlab和Lingo各有各的优点,Lingo是专门处理优化问题的软件,比Matlab自带的优化工具箱强大,但功能单一,无法处理别的问题。Matlab是综合类的工程数学软件,利用其语言和自带命令可以方便地编写处理各种问题的程序包,自带的工具箱涵盖的范围也很丰富。两者的关系可以说一个是小而精,一个是大而全。
3. Matlab优化工具箱及算法
在课上老师为我们简单地介绍了一下优化工具箱(Optimization Toolbox)中的部分函数,为我们今后熟练使用MATLAB各工具箱函数奠定了基础。学习到了一些函数常用的调用格式,线性规划问题的一般形式和解决方法以及一些求解方程和最小二乘的函数,如下表所示
函数 功能 函数 功能
\ 线性方程组求解 Lsqin 约束线性最小二乘
Fslove 非线性方程组求解 Lsqcurvefit 非线性曲线拟合
Fzero 非线性方程求解 Lsqnonlin 非线性最小二乘
\ 线性最小二乘 Lsqnonneg 非负线性最小二乘
表1 线性规划问题的一般形式和最小二乘函数
4. 多元统计分析及统计软件
在课上,我了解到多元统计分析是从经典统计学中发展起来的一个分支,是一种综合分析方法,它能够在多个对象和多个指标互相关联的情况下分析它们的统计规律,主要内容包括多元正态分布及其抽样分布、多元正态总体的均值向量和协方差阵的假设检验、多元方差分析、直线回归与相关、多元线性回归与相关(Ⅰ)和(Ⅱ)、主成分分析与因子分析、判别分析与聚类分析、Shannon信息量及其应用。简称多元分析。当总体的分布是多维(多元)概率分布时,处理该总体的数理统计理论和方法。
主成成分分析:主成分分析由皮尔逊(Pearson,1901)首先引入,后来被霍特林(Hotelling,1933)发展了。主成分分析是一种通过降维技术把多个变量化为少数几个主成分(即综合变量)的统计分析方法。这些主成分能够反映原始变量的绝大部分信息,
它们通常表示为原始变量的某种线性组合。主成分分析的一般目的是:(1)变量的降维;(2)主成分的解释。
主成分分析与信息重叠:主成分分析方法适用于变量之间存在较强相关性的数据,如果原始数据相关性较弱,运用主成分分析后不能起到很好的降维作用,即所得的各个主成分浓缩原始变量信息的能力差别不大。一般认为,当原始数据大部分变量的相关系数都小于0.3时,运用主成分分析不会取得很好的结果。主成分分析不能有效的剔除重叠信息,但他可以发现原始变量是否存在重叠信息,这对减少分析中的失误是有帮助的。
聚类分析:聚类分析指将物理或抽象对象的集合分组为由类似的对象组成的多个类的分析过程。它是一种重要的人类行为。聚类分析的目标就是在相似的基础上收集数据来分类。聚类源于很多领域,包括数学,计算机科学,统计学,生物学和经济学。在不同的应用领域,很多聚类技术都得到了发展,这些技术方法被用作描述数据,衡量不同数据源间的相似性,以及把数据源分类到不同的簇中
研究结果表明,基于网格的多密度聚类算法不仅能够对数据集进行正确的聚类,同时还能有效地弥补孤立点检测,有效地解决了传统多密度聚类算法不能有效识别孤立点和噪声的缺陷。【1】
相似性度量---距离矩阵:两个样品的距离越大,接近程度越小;两个样品的距离越小,接近程度越大.
4.1 类与类的特征
(1)最短距离法 (2)最长距离法 (3)类平均法(4)重心法(5)离差平方和法
系统聚类法的主要思想如下图所示
图2 系统聚类法流程
4.2 聚类过程
(1) 数据准备:包括特征标准化和降维。
(2) 特征选择:从最初的特征中选择最有效的特征,并将其存储于向量中。 (3)特征提取:通过对所选择的特征进行转换形成新的突出特征。
(3) 特征提取:通过对所选择的特征进行转换形成新的突出特征。
(4) 聚类:首先选择合适特征类型的某种距离函数或构造心得距离函数进行接近成都二度量,然后执行聚类或分组。
(5) 聚类结果评估:是指多聚类结果进行评估。评估主要有三种,外部有效评估、内部有效性评估黑选哪个惯性测试评估。【2】
老师还大量使用excel进行演示,让我们对统计软件基本功能的了解进一步加深。
在课程中老师还提到了一些关于梯度下降法和无监督学习方面的知识,我对此很感兴趣,课后又去网上搜集了相关的资料。
图3 梯度下降法的运行方式
4.3 梯度下降法
大规模随机梯度下降算法是近年来的热点研究问题,提高其收敛速度和性能具有重要的应用价值.【3】梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。 举一个非常简单的例子,如求函数法f(x)=x^2的最小值。利用梯度下降的方法解题步骤如下: 1、求梯度,∇=2x. 2、向梯度相反的方向移动x ,x □(←┴ ) x-y*∇,其中,y为步长。如果步长足够小,则可以保证每一次迭代都在减小,但可能导致收敛太慢,如果步长太大,则不能保证每一次迭代都减少,也不能保证收敛。 3、循环迭代步骤2,直到x的值变化到使得 f(x) 在两次迭代之间的差值足够小,比如0.00000001,也就是说,直到两次迭代计算出来的 f(x) 基本没有变化,则说明此时f(x)已经达到局部最小值了。4、此时,输出x,这个x 就是使得函数 f(x) 最小时的x的取值 。【4】
4.4 无监督学习
现实生活中常常会有这样的问题:缺乏足够的先验知识,因此难以人工标注类别或进行人工类别标注的成本太高。很自然地,我们希望计算机能代我们完成这些工作,或至少提供一些帮助。根据类别未知(没有被标记)的训练样本解决模式识别中的各种问题,称之为无监督学习。 【5】
我们为什么要使用无监督学习呢?
因为现实生活中常常会有这样的问题:
(1) 缺乏足够的先验知识,因此难以人工标注类别;
(2) 进行人工类别标注的成本太高。
很自然地,我们希望计算机能代我们(部分)完成这些工作,或至少提供一些帮助。常见的应用背景包括:
一从庞大的样本集合中选出一些具有代表性的加以标注用于分类器的训练。
先将所有样本自动分为不同的类别,再由人类对这些类别进行标注。
③ 在无类别信息情况下,寻找好的特征。
无监督学习算法用的最多的是训练参数,然后用一部分加了标签的数据测试。这种方法叫半监督学习(semi-unsurpervised)。最近看的几个深度学习算法是:稀疏自编码(sparse auto-encoder)、稀疏限制玻尔兹曼机器(sparse RBM)、K-means 聚类和高斯混合模型。根据论文An Analysis of Single-Layer Networks in Unsupervised Feature Learning的实验结果,K-means聚类算法是准确率最高,而且不需要超参数(hyper-parameter)。
稀疏自编码(sparse auto-encoder)
提到自编码,就必须了解BP神经网络。而稀疏自编码是在自编码基础上加入了对隐藏单元活性(activition)的限制:即稀疏性参数ρ,通常是一个接近于0的较小值(比如ρ=0.05)。如果机器学习的基础比较薄弱的话,建议先看Andrew Ng 老师讲授的《机器学习》。
BP神经网络,是使用前向传播(forward propagation)、后向传播(backward propagation)来训练参数。
图4 无监督学习流程
前向传播(向量表示法):
z^((2))=W^((1)) x+b^((!))
a^((2))=f(z^((2)))
z^((3))=W^((2)) a^((2))+b^((2))
h_(w,b) (x)=a^((3))=f(z^((3)))
其中,f(x)称为激活函数sigmoid函数:
f(z)=1/(1+exp(-z))取值范围[0,1].它的导数就是f^' (z)=f(z)(1-f(z))
双曲正切函数:
f(z)=tanh(z)=(e^z-e^(-z))/(e^z+e^(-z) )取值范围[-1,1]。它的导数是 f’(z)=1-(f(z))^2
后向传播:
前向传播中,需要用到的参数W和b,是我们要训练的参数。我们可以利用批量梯度下降的方法求得(这部分需要熟悉机器学习中梯度下降部分)。给定一个包含m个样例的数据集,我们可以定义整体代价函数为:
J(W,b)=[1/m ∑_(i=1)^m▒〖J(W,b;x^((i) ) y^((i) ))〗]+∁/2 ∑_(i=1)^(n_(i-1))▒∑_(i=1)^(s_i)▒∑_(j=1)^(s_i+1)▒〖(W_ji^((i) ))^2〗
= [1/m ∑_(i=1)^m▒〖1/2||〖h_(w,b) (x〗^((i) ))-y^((i) ) ||^2〗]+∁/2 ∑_(i=1)^(n_(i-1))▒∑_(i=1)^(s_i)▒∑_(j=1)^(s_i+1)▒〖(W_ji^((i) ))^2〗
其中,J(W,b;x,y)=1/2||h_(w,b) (x)-y||^2第一项中的J(W,b) 是一个均方差项;第二项则是一个正规化项,其目的是减少权值的幅度,防止过度拟合。【6】
无监督学习的优点是:相对于监督学习,在我们事先没有任何训练样本,而需要直接对数据进行建模。因为尽管我们的世界几乎被数据所淹没,【7】但很大一部分是未经标注未被整理过的,这意味着这些数据对于大多数目前的监督式学习来说是不可用的。而无监督学习则可以很好地去掉这一缺点。
5.符号运算及计算方法
符号运算是与数值运算相对于的一种运算。符号运算的输入(自变量)和结果(因变量)都是用无数值的符号表示,这样可以得到精确的符号解,由此特点,它在解决那些你简单的没有大量数据的或是无法得到输入的数据的问题有着数值运算无法完成的作用,意义重大啊。它在解决理论数学领域作用很大,像微积分,方程求解,各种变换,函数绘图,复数方面都是符号运算的地盘
5.1 符号运算
(1) 符号定义:sym 只能生成一个,但是可以指定一些属性
syms:可以同时生成多个变量
(2) 生成表达式
(3) 替换函数 subs
(4) 符号转换到数值 vpa
(5) 数学(help文档)
① 方程求解 solve
② 公式处理和化简
③ 微积分 diff,limit,taylor
④ 线性代数
⑤ 多项式
⑥ 假设检验
图5 符号运算、字符串操作及相互转化
计算方法
误差:模型误差、观察误差、计算误差(舍入,截断)
措施:尽量不要用小分母,选用稳定算法,化简减少计算步骤
非线性方程(组)求解(solve,fsolve)
二分法,迭代法,牛顿法, x_(n+1)=x_n-(f(x_n))/(f'(x_n))
注意事项:① 平方收敛
② 初始值的选取
③ 偶次根可以计算
④ 复根
(3) 插值与拟合(给出一些离散值,求不在表上的值)
插值:intep1,interp2,分段线性,样条
拟合:cftool,最小二乘A\b
线性方程组求解 ,A\b(直接法,没有截断误差,只有舍入误差)
注意事项:①条件数cond(A)
②迭代法(截断误差):gmres 、bicg
数值积分(复合辛普森公式):quad(@f,a,b)
常微分方程求解:ode23
偏微分方程求解: pdetool
6. 图形绘制及撰写论文
我学会了使用MATLAB的图形处理功能,包括基本的绘图命令、图形的简单控制、图形窗口的编辑以及图形的高级控制等
基本的绘图命令
函数名 功能描述
plot 在x轴和y轴都按线性比例绘制二维图形
Plot3 在x轴、y轴和z轴都按线性比例绘制三维图形
loglog 在x轴和y轴按对数比例绘制二维图形
semilogx 在x轴按对数比例、y轴都按线性比例绘制二维图形
emiology 在y轴按对数比例、x轴都按线性比例绘制二维图形
plotyy 绘制双y轴图形
表2 Matlab的基本绘图命令
6.1 二维曲线
将X轴和Y轴的数据分别保存在两个向量中,同时向量的长度完全相等,那么可以直接调用函数进行二维图形的绘制。
图6 Matlab的二维图形的一般形式
Android在其android.graphics包中提供了完整的本机二维图形库,开发者可以使用该资源让自己的应用程序更加地美观和生动。Android二维图形绘制不能通过XML文件来设置,需要开发者自需要开发者自行创建绘制类进行程序界面绘制。绘制类需要继承自View父类。【8】
当要绘制多个图形时,要使用Subplot函数。
(1) 图形注释:
① 图题的标注
② 坐标轴的标签
③ 文本标注和交互式文本标注
④ 图例的添加
⑤ 坐标网格的添加
⑥ 使用矩形或是椭圆在图形中圈出重要部分
6.2 三维图形的绘制
现有航海雷达模拟器的回波图像对物标间的遮挡判断不明确,回波强度不能有效反映电磁波传播的物理特性。在分析射线跟踪方法的基础上,提出了以三维视景库为数据源,通过视景图形绘制方法生成航海雷达图像。【9】
绘制三维图形时可使用MATLAB语言提供的相关函数:三维线图指令plot3
三维网线图和曲面图 :
三维网线图:使用mesh函数实现。
• 三维曲面图:使用surf函数实现。
(1)特殊图形的绘制:
(2)隐函数图形的绘制
(3)条形图和面积图(Bar and Area Graphs)
(4)饼形图(Pie Charts)
(5)离散型数据图
(6)方向和速度矢量图形
(7)等高线的绘制(Contour Plots)
图7 利用Matlab引擎绘图结果
MATLAB 进行二维、三维图形显示时, 程序语法简 单, 图形精度高, 用 VC++则需要几十行甚至数百行的 程序, 但 VC++容易做出各种用户界面。在 VC++环境 下调用 MATLAB 中的图形显示函数, 将二者结合进行 编程, 则可实现 VC++和 MATLAB 在此功能上的互补 及数据共享和数据可视化。【10】
6.3 数学建模论文相关规范
(1)标题、摘要部分
题目——写出较确切的题目摘要——2-3,00字,包括模型的主要特点、建模方法和主要结果。
(2) 中心部分
① 问题提出,问题分析。 ②模型建立 ③计算方法设计和计算机实现。 ④结果分析与检验。 ⑤讨论——模型的优缺点,改进方向,推广新思想。 ⑥参考文献——也有特定格式。\
(3) 附录部分
计算程序,框图。各种求解演算过程,计算中间结果。各种图形、表格。
① 论文形式:科学论文 :科学论文是对某一课题进行探讨、研究,表述新的科学研究成果或创见的文章。
② 论文选题:新颖,有意义,力所能及。
③ 数据资料:来源可靠,引用合理,目标明确。
④ 数学模型:通过抽象和化简,使用数学语言对实际问题的一个近似描述,以便于人们更深刻地认识所研究的对象。
⑤ 问题的研究现状和研究意义:了解透彻。
⑥ 论文格式:符合规范,内容齐全,排版美观。
⑦ 正文:1前言 2主体 3讨论 4. 参考文献。
学习心得:
以前我就听说过数学建模,还以为这只是单纯的与数学有关,只要学好数学就可以了,可知道了学了才发现并没有那么简单。数学建模中你要学习的东西很多,查阅筛选资料的能力、编程的能力、团队合作的能力、英语水平要好(读外国论文)、对各种相关软件的掌握、数学能力、解决问题的能力、总结的能力等等。在这次暑期数学建模的培训中,我学会了在没有书本和老师的方式中学习,因为很多都需要自己在课后去查找资料,而且我也已经养成了遇到问题先去网页上搜索而不是不动脑子张口就问的习惯,这强化了我的独立学习能力。在社会中,不可能像学校里那样随时都有有老师为你答疑解惑,所以我们必须要摆脱对老师的依赖,做一个独立学习者。