数学建模学习总结

更新时间:2024-05-17 00:31:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

MCR数模总结 1 / 33

个人在参加数学建模时做到总结,用自己的语言写的,未必准确,但比较好懂吧。还包含一些方法的MATLAB实现。在浏览时推荐按Ctrl+F键,然后在导航窗口中浏览标题,快速转跳。

数值和符号计算

符号积分

R=int(s,v): 对符号表达式s中指定的符号变量v计算不定积分.表达式R只是表达式函数s的

一个原函数,后面没有带任意常数C.

int(s): 对符号表达式s中确定的符号变量计算计算不定积分. int(s,a,b): 符号表达式s的定积分,a,b分别为积分的上、下限

int(s,x,a,b): 符号表达式s关于变量x的定积分,a,b分别为积分的上、下限

数值积分

1变步长辛普生法数值积分的matlab实现 [I,n]=quad(‘filename’,a,,b,tol,trace)

Filename:被积函数名,a,b分别是积分上限和积分下限,tol是积分精度,缺省时取10?6trace控制是否展现积分过程,非0时展现,缺省是为0。I为结果,n为函数调用次数。

2被积函数由一个表格定义时求定积分用

trapz(x,y): 梯形积分法,x时表示积分区间的离散化向量,y是与x同维数的向量,表示被积函数,z返回积分值。

3,二重定积分的数值求解, I=dblquad(‘f(x,y)’,a,b,c,d,tol,trace)

表示f(x,y)在[a,b]*[c,d]上的二重积分,其他用法与quad相同

http://wenku.http://m.njliaohua.com//link?url=zcJ-sxrj0QDqzz8xCnHTnB7gxjoNRyOZzS4_4ZA22c8Bs9inYn6vVkqTVr_w-riLA_FOkWU47c9u03BlD56wA0BOLRAFPnDA98UAEr1uMI_

求导数

y=diff(fun),

其中fun为被求导的函数

MCR数模总结 2 / 33

例如

>> y1=diff(1/(exp(x)+x^2))

-(2*x + exp(x))/(exp(x) + x^2)^2 求n阶偏导 y=diff(fun,x,n)

使表达式变漂亮,可用pretty(y)变成易于数学习惯的形式

微分方程

dsolve(‘微分方程’,’自变量’) 如y''?3y'?ex?0

dsolve(‘D2y+3*Dy+exp(x)=0’,’x’) 求微分方程的特解

dsolve(‘微分方程’,’初始条件’,’自变量’)

dy如(x2?1)?2xy?cosx?0 在y|x?0?1条件下

dxdsolve(‘(x^2-1)*Dy+2*x*y-cos(x)=0’,’y(0)=1’,’x’) 求微分方程组解

通解dsolve(‘微分方程1,微分方程2’,’自变量’)

特解dsolve(‘微分方程1,微分方程2’,’初始值’,’自变量’)

求没有解析解的微分方程(方程组)的数值解

这个解法有点难理解,主要是待解函数的写法有点奇怪

1.在解n个未知函数的方程时,x0和x均为n维向量,m文件的待解方程可以x的分量形式写成,m文件中的函数式一个函数组,每个函数的左边都以该函数因变量数组中的一项来表示。

MCR数模总结 3 / 33

2 高阶微分方程组要等价的变成一阶微分方程组,

http://wenku.http://m.njliaohua.com//view/6367a003de80d4d8d15a4f3d.html HTTP://wenku.http://m.njliaohua.com//view/2a3f2aea998fcc22bcd10d18.html

符号计算技巧

一般在符号计算过程

syms x y; 定义符号 int diff?? 符号计算

eval 赋值的时候如果有表达式的话,eval可以将表达式当成语句运算,以达到赋值的目的

subs 是赋值函数,用数值替代符号变量替换函数,

例如:

subs(a+b,a,4) 意思就是把a用4替换掉,返回 4+b。 也可以替换多个变量。 例如:

subs(cos(a)+sin(b),{a,b},[sym('alpha'),2])

分别用字符alpha替换a和2替换b,返回 cos(alpha)+sin(2) 用法很灵活,仔细看帮助,会得到想要的形式的。

插值与拟合

插值就是要过已知点,拟合不一定要过已知点。

一维插值:

分段线性插值 就是分段,在相邻的两个已知点之间用直线连接,虽然粗糙,但是很实用,工程现场用的很多。

拉格朗日插值(Lagrange插值)

就是在[a,b]已知n+1个已知点,过这n+1个点用至多n次的多项式去拟合原函数这就是Lagrange插值。

又n次多项式有n+1个未知参数,刚好可以用这n+1个点唯一确定一个n次多项式。(不过个人感觉这是个不好的插值办法,第一计算量太大,第二n的次数一高,震荡太明显了,不符合原来的函数)

MCR数模总结 4 / 33

Newton插值

也是用n次多项式去拟合n+1个点,但是原理是用差商的累加来近似原函数的方法,Lagrange插值计算量太大,增加一个节点计算必须重新开始,牛顿法却只用在等式后面加一项就行了。

埃尔米特插值(Hermite 插值)

当知道已知点的导数,又要求插值函数和原函数在已知点的一阶甚至高阶导数相等时,可以采用埃米尔特插值,往往分段埃米尔特插值的效果会更好。

样条线插值

工程中以前常用有弹性的金属条(样条)将两点之间连起来,用金属条的位置代替原函数的值。样条线插值就是从这衍生而来的,具有良好的光滑度等优点,现在用k次多项式函数来表示样条函数,当多项式为一次时就是分段线性插值。是这种插值方法分段的,要求整段插值函数要有k-1阶连续导数。但是正因如此,这个函数是不等唯一确定的,要有相应的定解条件(边界处的导数什么的,定解条件MATLAB有默认的还有自己设置的)。

yi=interp1(x0,y0,xi,method)

x0,y0 原始数据,行向量或者列向量都可以,xi为待拟合的点 method可为以下选项

'nearest' 最近项插值 'linear' 分段线性插值 'spline'三次样条线插值(spline会比pchip更光滑一点,同时也会多一点震荡)

'pchip'分段三次埃米尔特插值(也不知道他这里的导数是怎么默认的,好像是两临近点间的斜率) 'cubic'和pchip一样

我更喜欢以下的用法

pp=interp1(x0,y0,method,'pp') ('pp'为分段多项式插值法)或 pp=interp1(x0,y0,method,'extrap')('extrap'表示外插法)

这样返回的是一个结构体,里面储存了插值函数的系数,原值等信息。再通过

y=ppval(pp,xi)

就能算出任意一点的值。

二维插值

当已知平面上的一些点,和高程之类的数据时,就可以使用二维插值,这里的方法也很多,matlab中的好想不是很好,分样本是网格型数据的插值和样本是散乱数据的插值。散乱数据插值Matlab中当数据量太大时很容易卡机,样本量多时最好插好后的不要大于2000*2000的网格。

MCR数模总结 5 / 33

统计

?x11?总体X???x?n1x1p??? ,即有n个样本,每个样本有p个元素组成。这是多元统计的基本模xnp??型,在接下来的各种方法中都会用到这种模型[1]。

数据标准化

就是将各种数据转化为均值为0,方差为1 的数据,能消除量纲和数量级的影响。就是进行x?uz=i的变换。实际应用中多是用样本标准差和样本的均值代替总体的标准差和均值。变化

?后的数据的协方差矩阵等于原来的相关系数矩阵。但是,标准化不是必须的,在聚类中有时标准化后的指标反而没有标准化前的好,主成分分析中标准化也会使一部分信息丧失,还有神经网络中的标准化也不是必须的。所以不妨两种方法都试试。

MATLAB实现:

[Z,mu,sigma] = zscore(X,flag,dim) Z: 变换后的矩阵。

mu: 为样本均值,sigma为样本标准差。

flag: 为0时用n-1估计标准差(默认),为1时用n估计标准差。

dim: (维数dimension)=1时对各一列标准化(默认),为2时对各行标准化。

假设检验

假设检验个人感觉主要是关于均值是否相等的检验,如果利用数据的统计量,那就是参数检验,否则是非参数检验。主要的东西是要搞清楚什么时候用什么检验方法,以及检验结果的判断。真要用到时可以翻看[2]。

MATLAB实现

单样本t检验

[h,p,ci,stats] = ttest(x,mu,alpha,tail,dim); (原假设为x的均值=mu)

x 最好写成列向量 alpha:显著性水平

tail可为’both’ ’left’ ’right’表示双尾检验还是单侧的默认为both。

MCR数模总结 26 / 33

解的。

最小顶点覆盖:

这个也写成了规划类Lingo的程序,还有图论工具箱中也有。目前仅限无向图。

还有就是做了一下2000年的钢管的运输的第一问,感觉图论的题目难起来还真是挺有意思的。不过要是没看答案我还真做不出来。

遗传算法

虽然遗传简单的遗传算法用MATLAB的GUI很容易实现,而复杂的遗传算法我是不敢在竞赛中轻易尝试的,照理说我不用总结遗传算法的。但是因为我感觉这个算法很神奇,很有吸引力,以后肯定会用到。所以我打算好好地总结一下。

基本遗传算法(简单遗传算法)

基本遗传算法是比较原始的遗传算法,虽然他的效果并不好,被证明不是收敛的(不能收敛到全局最优解)[7]。其中的很多的方法甚至已被抛弃,但是他是比较原始比较基础的,了解他可以更好地了解遗传算法的原理和历史,所以还是有必要了解一下的。因为我对遗传算法本来就有一定了解,所以现在只记录下这次我看《MATLAB遗传算法工具箱及应用》后的一些新发现。 编码:

第一,一般的遗传算法是用二进制编码,但是n位二进制只能表示2n个数,所以就算把所有可能的个体都列出来都只是有限个。所以解码后就是以一定精度表示的原来的数。比如x?[0,5] ,编码用5位二进制,那么共能表示25=32个数,

00000?000001?0??

00010?0?2? ??5?0 52?111111?0?32??5所以,对于一般的编码方式,遗传算法的解空间对应到原来的实数域上式离散的,编码的二进制位数对应了精度的高低。这样的坏处是一般只能接近最优解,得不到最优解(但这种精度一般已经很好了),好处是这样对于整数规划等原来用其他方法很不好办的优化提供了方便。

但是,一些在原来解空间中相邻的解,转化成二进制后相差很大,如0111111和1000000,导致局部寻优能力变差。所以就有了格雷码编码。其实这只是一种二进制编码的变形,使任意相邻的两个二进制数只相差一位。如: 十进制 二进制 格雷码 0 0000 0000 1 0001 0001 2 0010 0011 3 0011 0010 4 0100 0110 5 0101 0111 6 0110 0101 7 0111 0100 8 1000 1100 9 1001 1101 MCR数模总结 27 / 33

10 1010 1111 还有就是浮点数编码,就是用一段范围内的一个浮点数表示原来的解,优点是便于传统的寻优算法相结合(如梯度法),估计MATLAB遗传算法工具箱中的double vector就是浮点编码,所以只有在该选项下才能用混合遗传算法。浮点编码其实就是用真值去交叉什么的。还有就是混合编码了。 选择:

轮盘赌选择:原来看到一篇用遗传算法求最小支配集的论文,里面提到的轮盘赌选择令我摸不着头脑。原来是这样的,比如求最大值,先根据目标函数值(可能有正有负)计算出适应度值eval?Uk?(适应度一般要求全为正数,转化成正数是为下一步选择做准备。一般按照一定规则将目标函数转换成全是正的,如将所有数字都加上一个足够大的正数,但是这个转换的规则的不好确定,这也是简单遗传算法的缺点之一)。 再计算出群体的适应度:

popsizeF??k?1eval?Uk?

根据适应度计算每个个体被选中交配的概率:

eval?Uk?pk?

F再用pk表示该个体被选中交配的概率。再将pk按顺序排在[0,1]之间,每次产生一个[0,1]之间的随机数来确定哪个个体被选中进入交配。

这种轮盘赌选择方法是根据自然界的规律来的原始的遗传算法,不过这种方法也可能使一些基因良好的个体的基因没有被选中,基因不好的反而被选中。还有适应度函数的不好确定等弊端,随机性过大。所以现在基本不用了。

现在基本是根据目标函数排序,好的个体直接留下来,不好的个体直接舍弃。还有很多选择方法,如最佳保存选择(每次一定保证要留下最好的),随机竞争选择(先轮盘赌选出几个,然后这几个中选出最好的)??很多方法大同小异,且也没有什么方法效果特别好。所以基本懂什么意思就行。还有那些小生境,共享函数什么的就是为了不让基因太相近的个体杂交,从而使种群停止进化陷入局部最优解。采用共享函数什么的可以加大种群基因的多样性。

Sheffield大学GA工具箱的通用函数简单用法: 函数ranking计算适应度

Fitnv=ranking(Objv); 默认使用线性排序,选择压差为2估计适应度。 Fitnv:返回的适应度 Objv:目标函数值

我试过用遗传算法解最小支配集,南京师范14年的校赛题那个微博问题,先是自己编了一个遗传算法,然后我发现其实用MATLAB的遗传算法工具箱也可以解(可以有整型变量,将上下界限定为[0,1]后就可以是0/1变量,目标函数里还可以嵌套其他自编的函数)。我先用逆序搜索的办法找到了88个点和93个点的支配集,把这个加入初始种群,用遗传算法后发现种群很快就变的和88一样了。单独用遗传算法时解得的最优解是118个点。其实自己编就是灵活一点,但是太麻烦,结果有时还没有MATLAB自带工具箱的好,可视化方面远不如其自带工具箱,当想采用不同方法是特别麻烦。

MCR数模总结 28 / 33

多目标的优化方法

多目标优化可描述成如下:

对于多目标规划问题,记它的变量可行域为S,相应的目标可行域Z=f(S)。给定一个可行点,有,有,则称为多目标规划问题的绝对最优解。

若不存在,使得,则称为对目标规划问题的有效解,多目标规划问题的有效解也称为Pareto最优解。

因为多目标优化的最优值往往不能同时取到,以前以为有什么特别好的方法来多目标优化,后来看看好像没有,各种方法都有优缺点吧。主要有一下几种方法:

1.给各个目标附上一个权重,然后转化成单目标优化。(操作简单,有点主观,但好像结果不

一定比那些高深的方法坏。)

2.当目标明显可以分出主次时,就可以用目标规划里的方法,求第一主目标时,其目标作为

宽松约束,求出第一主目标后,将第一主目标转化成约束,再以此依次求第二,第三?目标。(这种适合用在目标明显可以分出主次的时候)。

3.评价函数法,根据各种方法构造一个评价函数来判断解的好坏,构造评价函数的方法有理

想解法(这个其实挺好理解的),线性加权法等。

4.用遗传算法等进化的方法找pareto解(非劣解)。遗传算法可以并行的找到一系列较好的解,

然后我们可以从中选择我们认为满意的。在用MATLAB解的时候往往pareto解会包含单个目标的最优解,和很多中间的解,我们只要选择满意的就行了。具体方法可见[7]。

对策论

对策论又称博弈论,对它做最通俗浅显的解释如下:

研究两个或者多个人合作或竞争,如何使我方获利最大,或各方分配公平的学科。

MCR数模总结 29 / 33

二人竞争对策[8]

有鞍点的对策直接根据Nash平衡原理搜索就能得到纯对策(纯对策可以有一个或者多个,但是每个纯对策对于我方来说获利是一样多的)。没有鞍点情况下不存在纯对策,此时就要采用混合对策(以不同的概率采用不同的对策)。如果采用数学规划的方法求解混合对策,那么“零和/常数和”时是一个线性规划,“双矩阵对策”时是一个二次规划,这些都已有MATLAB或Lingo程序了。 多人合作对策[9]

之所以要进行多人合作,是因为“共同合作”时给各方带来的利益大于任何一方“单独”或者“小规模合作”时给各方带来的利益。如何合理分配效益?Shapley值是根据每一方加入时带来的利益的增加值的多少来分配利益的,优点公平公正,缺点需要的信息太多(需要任意n方合作的利益)。也已有MATLAB程序。

其他对策论的类型暂不研究。

排队论

排队论的假设——泊松流[5]

由于顾客到达的间隔时间和服务时间不可能是负值,因此,它的分布是非负随机变量的分布。最常用的分布有泊松分布,指数分布(就是负指数分布)。

设N(t)表示在时间区间[0,t)内到达的顾客数,最常见的排队论类型中假设{N(t) = N(s + t) ? N(s)}服从泊松分布:

n!含义为在任意间隔为t的时间段内,出现n个顾客的概率为Pn?t?。它的数学期望和方差分别是

E[N(t)] =λt Var[N(t)] =λt

即在单位时间内出现顾客数服从参数为λ的泊松分布。它具有无后效性,顾客数的概率只于时间间隔的长度有关等性质,这种顾客到达的方式被称之为泊松流。当输入过程是参数为λ的泊

Pn?t???t??ne??tn?1,2,

MCR数模总结 30 / 33

松流时,那么顾客相继到达的时间间隔T 必服从参数为λ的指数分布。 概率分布函数:

?1?e??t,t?0 P?T?t??F?t???t?0?0,概率密度函数: f?t???e??t,t?0

表示排队论的符号X /Y / Z / A/ B /C

第一个字母:顾客到达流或顾客到达间隔时间的分布,如M表示泊松分布; 第二个字母:表示服务时间的分布; 第三个字母:服务台数目;

第四个字母:系统容量限制(当大于容量后来的顾客看见队很长就走了) 第五个字母:是顾客源数目;

第六个符号:是服务规则,如先到先服务FCFS,后到先服务LCFS等。 一般看具体情况需使用几个符号。

只研究最一般的排队论模型,即单位时间内顾客的到来服从参数为λ的泊松分布,单位时间内一个服务台能接待的顾客数量服从参数为μ的泊松分布。系统容量为无穷,即当队伍很长时顾客会一直等下去(等待制),即M/M/n/∞。

排队论中主要的指标关系和公式

λ 单位时间内的平均顾客到达数

μ 单位时间内一个服务台的平均顾客接待数 A=λ/μ 系统的到达负载(load)

ρ=A/n 系统的接待能力(当ρ>1时队伍会一直长下去,就没有意义了,所以此时ρ=1) Ls 平均总队长 Lq 平均等待队长

Ws 顾客平均逗留时间 Wq 顾客平均等待时间

Pwait 顾客等待的概率,也就是系统繁忙的概率

Little公式

M/M/n/∞系统的顾客平均等待时间[10]:

Ls=λWs Lq=λWq Ws=Wq+1/μ Ls=Lq+λ/μ Ann!?1??? Pwait?A,n??n?1kAAn??k!n!?1???k?0n表示有n个服务台,其实当n=1时有更简单的表达式,但这个表达式更通用。

顾客平均等待时间:

1/?Wq?Pwait

n?A

本文来源:https://www.bwwdw.com/article/ajl7.html

Top