当前位置:文档之家› 数学建模B题含代码

数学建模B题含代码

数学建模B题含代码
数学建模B题含代码

2013高教社杯全国大学生数学建模竞赛

承诺书

我们仔细阅读了中国大学生数学建模竞赛的竞赛规则.

我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮

件、网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的

问题。

我们知道,抄袭别人的成果是违反竞赛规则的, 如果引用别人的成果或其他

公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正

文引用处和参考文献中明确列出。

我们郑重承诺,严格遵守竞赛规则,以保证竞赛的公正、公平性。如有违反

竞赛规则的行为,我们将受到严肃处理。

我们参赛选择的题号是(从A/B/C/D中选择一项填写): B 我们的参赛报名号为(如果赛区设置报名号的话):

所属学校(请填写完整的全名):华南师范大学增城学院

参赛队员 (打印并签名) :1.

2.

3.

指导教师或指导教师组负责人 (打印并签名):

日期:年月日赛区评阅编号(由赛区组委会评阅前进行编号):

2013高教社杯全国大学生数学建模竞赛

编号专用页

赛区评阅编号(由赛区组委会评阅前进行编号):

全国评阅编号(由全国组委会评阅前进行编号):

DVD在线租赁

摘要

问题(三):题目需要我们回答购买各种DVD的数量来使95%的会员能看到他DVD想看到的DVD,并且要怎么分配才能使满意度达到最大;每种建立以总的购买数最小、会员满意度最大为双目标的规划模型。通过确定在一个月内每张DVD 的在每个会员中手中的使用率;然后通过c语言程序编程来确定每种DVD的购买量;建立0-1规划模型;通过LINGO软件使满意度达到最大,来最终确定DVD 的分配;

一级,二级目标,将多目标规划转化为单目标;同时将第j种DVD的购买量

y的

j

整数约束去掉,求解出最小购买数为178.125张。将最小购买数作为约束条件,优化满意度后,得到最大满意度为95%;然后对此时DVD的购买量

y向上取整,得到总购

j

买数为186张。当购买数为186张时,会员满意度达到97%。

三、模型假设

1、租赁周期为一个月,每月租两次的会员可以在月中再租赁一次;

2、同一种DVD每人只能租赁一次;

3、DVD在租赁过程中无损坏;

4、会员每月至少交一次订单;

5、会员只有把前一次所借的DVD寄回,才可以继续下一次租赁

6、月底DVD全部收回,继续下个周期的租赁;

7、随着时间的推移,该网站的会员们的流动情况不会出现大变动。

四、符号说明

一、问题的重述

随着信息时代的到来,网络成为人们生活中越来越不可或缺的元素之一。许多网站利用其强大的资源和知名度,面向其会员群提供日益专业化和便捷化的服务。例如,音像制品的在线租赁就是一种可行的服务。这项服务充分发挥了网络的诸多优势,包括传播范围广泛、直达核心消费群、强烈的互动性、感官性强、成本相对低廉等,为顾客提供更为周到的服务。

考虑如下的在线DVD租赁问题。顾客缴纳一定数量的月费成为网站会员,可以订购DVD租赁服务。会员对哪些DVD有兴趣,只要在线提交订单,网站就会通过快递的方式尽可能满足要求。会员提交的订单包括多张基于其偏爱程度排序的DVD。网站会根据手头现有的DVD数量和会员的订单进行分发。每个会员每个月租赁次数不得超过2次,每次获得3张DVD。会员看完3张DVD之后,只需要将DVD放进网站提供的信封里寄回(邮费由网站承担),就可以继续下次租赁。考虑回答下面问题:

(1)网站准备购买一些新的DVD,通过问卷调查1000个会员,得到了愿意观看这些DVD的人数(表1给出了其中5种DVD的数据)。此外,历史数据显示,60%的会员每月租赁DVD两次,而另外的40%只租一次。假设网站现有10万个会员,对表1中的每种DVD来说,应该至少准备多少张,才能保证希望看到该DVD的会员中至少50%在一个月内能够看到该DVD?如果要求保证在三个月内至少95%的会员能够看到该DVD呢?

(2)表2中列出了网站手上100种DVD的现有张数和当前需要处理的1000位会员的在线订单,如何对这些DVD进行分配,才能使会员获得最大的满意度?请具体列出前30位会员(即C0001~C0030)分别获得哪些DVD。

(3)继续考虑表2,并假设表2中DVD的现有数量全部为0。如果你是网站经营管理人员,如何决定每种DVD的购买量,以及如何对这些DVD进行分配,才能使一个月内95%的会员得到他想看的DVD,并且满意度最大?

(4)如果你是网站经营管理人员,你觉得DVD的需求预测、购买和分配中还有哪些重要问题值得研究?请明确提出你的问题,并尝试建立相应的数学模型。

单用数字1,2,…表示,数字越小表示会员的偏爱程度越高,数字0表示对应的DVD 当前不在会员的在线订单中。

二、问题的分析

问题分析:题中列出了网站手上20种DVD 的现有张数和当前需要处理的100位会员的在线订单,要得到使会员获得最大满意度的DVD 分配方案,这可以通过建立线形规划模型来实现。由于每个会员对不同DVD 的偏爱程度不同,且题中所给的列表中会员的在线订单中数字越小表示会员的偏爱程度越高。由于每个会员可以按偏爱程度在20种DVD (可以参考)

五、模型的建立与求解

(一):问题一

由历史数据,60%的会员每月租赁DVD 两次,而另外40%的人只租一次。由假设会员如果在当月归还了DVD ,一般会同时有第2次的租赁要求,因此认为有60%的会员在一个月有两次租赁需求,其他40%的会员为一次。近似认为会员的需求基本上能满足,从而认为有60%的会员会在一个月内归还DVD ,另外40%则不能。在一个月内归还的DVD 还可以满足另一个会员,又新购DVD 一般会较受欢迎,因此认为该DVD 一直在

周转中,没有出现该DVD 空闲情况。故可以合理地认为一张新DVD 在一个月内以60%的概率满足两个会员,40%的概率满足一个会员,从而一张DVD 的相对一个人来说使用率为 7.0%402%60=+;

需要准备的j DVD 张数为j Q ;由调查结果1000个会员中愿意观看DVD 的购买量为i x 。 模型一、

保证希望看到该DVD 的会员中至少50%在一个月内能够看到该DVD 需要准备的DVD 的张数:

保证希望看到该DVD 的会员中至少95%在三个月内能够看到该DVD 需要准备的DVD 的张数: 模型的求解:

当2001=x 时 保证希望看到该DVD 的会员中至少50%在一个月内能够看到该DVD 需要准备的DVD 的张数

保证希望看到该DVD 的会员中至少95%在三个月内能够看到该DVD 需要准备的DVD 的张数:

同理可得各种DVD 需要准备的张数,计算得下表1: 表1:各种DVD 需要准备的张数

模型二

我们将每月租凭DVD 两次的会员平均分成两部分,一部分是在月初借DVD ,月中还DVD ;第二部分是在月中借DVD ,月末还DVD ;这样就将第一部分月初借的DVD 在月中的时候再借给第二部分;这样就能使需要准备的DVD 数达到最小。

保证希望看到该DVD 的会员中至少50%在一个月内能够看到该DVD 需要准备的DVD 的张数:

保证希望看到该DVD 的会员中至少95%在三个月内能够看到该DVD 需要准备的DVD 的张数: 模型求解:

保证希望看到该DVD 的会员中至少50%在一个月内能够看到该DVD 需要准备的DVD 的张数:

保证希望看到该DVD 的会员中至少95%在三个月内能够看到该DVD 需要准备的DVD 的张数:

同理可得各种DVD 需要准备的张数,计算得下表2: 表2:各种DVD 需要准备的张数

会员i 对某种DVD 偏爱度ij c 的量化:会员对DVD 偏爱度ij c 是随着订单数字

ij a ij (a 0) 时的增加而减少,其中会员对网站的满意度与满足会员的偏爱度是挂钩的;因此我们可用一非增函数来度量;从心理学的角度来看:随着ij a 的增加,相邻的两个订单数字之间的偏爱度的差会越来越小,所以我们定义了; 不同会员在对同一种DVD 偏爱指数相同时,我们在分配DVD 时优先考虑编号在前的会员。要确定把那张DVD 租给哪个会员,才能使满意度达到最大,因此我们引入ij x 表示把第j 种DVD 是否租给第i 个会员;从问题我们可以看出这是一个如何分配的问题,我们不妨把其中现有DVD 的张数看成现有判断条件为需要完成的任务,把每一为会员看成完成这些任务的人选,其中他们对各种DVD 的偏爱度就代表他们完成相对应的任务的能力;我们就要使他们对各种任务的完成能力达到最大;

约束条件所有的会员分配到j 种DVD 的数量之和不能超过现有的第j 种DVD 的张数

j i i ij

b x

<=∑==1000

1

=j (1、2...100;ij x 为0-1变量)

由于网站每次对每个会员DVD 的分配要么0张要么3张所以

i j j u 3100

=∑

== (i=1、2、...1000;ij u 为0-1变量)

对问题(2)建立0—1规划模型。 模型三: 目标函数;

约束条件:??????

?????=<=∑∑====3

10001000

1j j ij

j i i ij x b x (i u 、ij x 均为0-1变量;i=1、2....1000;j=1、2....100);

模型求解: 用LINGO 数学软件实现对此题0-1规划模型的求解;执行的代码见附录

一;可以获得的最大满意度为1634.712其中前30位会员(即C0001~C0030)获得DVD 情况如下表所示

问题三是问题一和问题二的结合,要求我们在确保95%的会员能得到他想看的DVD 的前提下使会员对网站的满意度达到最大;在这里我们需要解决的问题

如何使采购的DVD 总数量最少;2、如何每种DVD 的采购量,才能使客户的满意度达到最大;因此我们求出需要准备DVD 总数的上下限,假定网站在一个月内分配给会员一次DVD (三张他想要看的DVD )即认为会员得到他想看的DVD 。由于在一个月内一张DVD 使用率为0.7设购买第j 种DVD 的数量为j b ,相当于能够满足网站在一个月内需求为j 种DVD 的会员数

7

.0j b 。每一种DVD 都满足95%的会员的观看,这样既能满

足题目要求,又能使满足度达到最大;所以需要购买j 种DVD 的数量j b 有如下表达式: 上限:每月租二次的人两次会员还回来的DVD 全部不能重复利用,则得出可以借出的DVD 总数的上限为

下限:每月租二次的人两次会员还回来的DVD 全部能重复利用,则得出可以借出的DVD 总数的下限为

利用模型一的方法进行求解:

目标函数: ∑==?=1000

1

%

957.0i i ij

j x

b

(ij x 为0-1变量,即当ij a 小于6大于时0,ij x 就为1;否则就为0;j=1、2....100)

约束条件: 45602850100

1

<==<

∑==j j j

b

(ij x 为0-1规划;当ij a =0时ij x =0,ij x =1,j=1、2....100) 建立0-1规划模型

目标函数: ij i i j j ij x c B ∑∑=====100011001max 约束条件:?????

?

?????=<=∑∑====i

j j ij j i i ij u

x b x 310001000

1

(i u 为0、1、2变量,ij x 为0-1变量;i=1、2....1000;j=1、2....100);

模型求解:

在通过c 语言进行编程求解中过程中,在数据的输入方面存在很大困难,所以我们先把excel 里们的数据复制记事本然后复制到word ,通过查找、替换我们把空格替换成逗号,然后就把数据复制带0.6++vc 里面,这样数据的处理就得到了解决;然后通过c

语言和LINGO进行编程可以求出各种DVD的购买量,执行的程序见附录二与附录三;

我觉得DVD 的需求预测、购买和分配中还要考虑收入和费用;

假设:会员的入会费为y 元,网站每月共有i 名新会员加入;每月的收入就为yi 每一张DVD 的平均购买费为s 元,DVD 的购买数量为k ;每月的购买费就为ks

每一张DVD 使用的时间为m 月,所以每月DVD 的折旧费为m

s

元;

网站每月正常使用费用(如工人的工资,日常饮用水等)为L 元; 建立模型五

yi >ks +m

s

+L

所以每月DVD 的购买数量

在DVD 的需求预测方面还需要考虑会员的入会费和DVD 的更新速度; 在DVD 的分配方面还需要考虑会员的在线时长,会员们之前所订购的DVD 的种类,消费习惯。

六、模型结果的分析

3、在问题三方面我们对每一种DVD 都满足95%的会员的观看,这样既能满足题目要求使DVD 的总数要达到满足95%的会员的观看,又能使满足度达到最大;

附件一:

model:

sets:

dvd/1..100/:total;!total 为网站现有

j

DVD

的数量;

huiyuan/1..1000/; !自定义0-1向量; pianai(huiyuan,dvd):data0; bianliang(huiyuan,dvd):data1; Endsets

!目标函数(总体满意度最大);

max=@sum(pianai(i,j):data1(i,j)*data0(i,j)); ! x (i,j) ,t (i)为0-1变量; @for(bianliang:@bin(data1)); ! 约束条件每人可租DVD 数Yi=3或0;

@for(huiyuan(j):@sum(bianliang(j,i):data1(j,i))<=3); ! 所租

j

DVD

总数小于网站现有

j

DVD

的数量;

@for(dvd(i):@sum(bianliang(i,j):data1(i,j))<=total(i)); data:

total=10 40 15 20 20 12 30 33 35 25 29 31 28 61 2 28 28 26 31 38 34 29 35 22 29 81 1 19 25 41 29 35 1 40 39 5 106 30 29 2 110 6 15 36 34 11 32 25 2 64 40 26 33 26 61 2 11 38 44 36 27 31 42 44 12 81 10 35 33 30 2 40 15 11 28 24 20 88 9 28 31 8 22 3 70 21 34 4 38 27 39 28 24 15 50 24 36 55 2 40 ; ! 网站现有

j

DVD

的数量;

data0=

6 0 0 0 0 0 8 1 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

7 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0

0 0 0 0 5 1 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 7 0 0 0 3 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 ...... ......

0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 2 0 0 0 9 8 0 0 0 0 0 0 0 0 0 0 0 0 0 4 3 0 0 5 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 0 7 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 8 0 1 0 0 0 0 0 0 0 0 0

0 5 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0

0 9 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3

0 0 2 0 0 0 7 0 0 0 0 0 0 0 0

0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 8 0 0 0 0 0 10 0 7 0 0 0 2 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0

0 0 0 0 0 0 0 0 6 3 0 0 0 0 0 0 0 0 0 0 0

0 4 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 8 0 10 0 0 6 0 0 0 0 0

0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 7 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 5 0 0 1 0 0 0 0 0 0 4

;

enddata

end

附录二:

#include

int main(void)

{

int x[1000][100]={6,0 ,0 ,0 ,0 ,0 , 8 ,1 ,0 ,0 ,4 ,0 ,0 ,0 ,0 ,0................}; //输入每位会员的的在线订单

int maxB,i,j,c[1000][100],b[100],k=0,y=0,n[100]={0};

for(i=0;i<1000;i++){

for(j=0;j<100;i++){

if(x[i][j]==0)

c[i][j]=0;

else c[i][j]=1/x[i][j];}

//得出偏爱度,当1/x[i][j]不为0时;c[i][j]=1/x[i][j];当当1/x[i][j]

为0时c[i][j]=0;

}

//进行0—1规划;

for(i=0;i<1000;i++){

for(j=0;j<100;i++){

if(x[i][j]==0)

x[i][j]=0;

else if(x[i][j]<=3) x[i][j]=1;

else x[i][j]=0;}

}

//求出需要第j种DVD的人数

for(j=0;j<100;i++ ){

for(i=0;i<1000;i++){

n[j]=n[j]+x[i][j];

}

}

//得出第j种DVD需采购数量

for(j=0;j<100;i++){

b[j]=0.7*0.95*n[j];

}

//再次进行0-1规划

for(j=0;j<100;i++){

for(i=0;i<1000;i++){

if(k

k=k+x[i][j];}

else

x[i][j]=0;

}

}

for(i=0;i<1000;i++){

for(j=0;j<100;i++){

if(y!=3)

y=y+x[i][j];

else

x[i][j]=0;}

}

//输出需要购买j种DVD的数量,并且求出满意度。for(j=0;j<100;i++){

printf("%d",b[j]);

for(i=0;i<1000;i++){

maxB=maxB+c[i][j]*x[i][j];

}

}

//输出满意度

printf("%d\n",maxB); return 0;

}

附录三:

model: sets:

dvd/1..100/:total;!total 为网站现有

j

DVD

的数量;

huiyuan/1..1000/; !自定义0-1向量; pianai(huiyuan,dvd):data0; bianliang(huiyuan,dvd):data1; Endsets

!目标函数(总体满意度最大);

max=@sum(pianai(i,j):data1(i,j)*data0(i,j)); ! x (i,j) ,t (i)为0-1变量; @for(bianliang:@bin(data1)); ! 约束条件每人可租DVD 数Yi=3或0;

@for(huiyuan(j):@sum(bianliang(j,i):data1(j,i))<=3); ! 所租

j

DVD

总数小于网站现有

j

DVD

的数量;

@for(dvd(i):@sum(bianliang(i,j):data1(i,j))<=total(i)); data: total=

43 67 48 76 39 54 56 58 69 49 51 55 51 63 51 75 52 45 51 67 68 49 65 41 50 59 52 39 50 71 47 68 60 62 68 61 43 59 58 52 88 66 51 65 64 52 57 50 54 64 71 52 57 45 57 59 57 46 59 58 47 60 55 60 48 60 65 61 61 66 64 66 47 59 46 39 39 57 56 51 59 33 45 35 63 44 66 42 43 55 73 49 43 45 79 47 67 62 39 66 ; ! 网站现有

j

DVD

的数量;

data0=

6 0 0 0 0 0 8 1 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

7 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0

0 0 0 0 5 1 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 7 0 0 0 3 0

2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0

0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 9 0 0 0 0

......

......

0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0

2 0 0 0 9 8 0 0 0 0 0 0 0 0 0 0 0 0 0 4 3

0 0 5 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 6 0 0 7 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 8 0 1 0 0 0 0 0 0 0 0 0

0 5 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0

0 9 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3

0 0 2 0 0 0 7 0 0 0 0 0 0 0 0

0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 8 0 0 0 0 0 10 0 7 0 0 0 2 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0

0 0 0 0 0 0 0 0 6 3 0 0 0 0 0 0 0 0 0 0 0

0 4 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 8 0 10 0 0 6 0 0 0 0 0

0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 7 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 5 0 0 1 0 0 0 0 0 0 4

;

enddata

end

数学建模代码汇总

插值 % 产生原始数据 x=0:0.1:1; y=(x.^2-3*x+7).*exp (-4*x).*sin (2*x); % 线性插值 xx=0:0.01:1; y1=interp1 (x,y,xx,'linear'); subplot (2,2,1) plot (x,y,'o',xx,y1); title ('线性插值'); % 最邻近点插值 y2=interp1 (x,y,xx,'nearest'); subplot (2,2,2) plot (x,y,'o',xx,y2); title ('最邻近点插值'); % 三次插值 y3=interp1 (x,y,xx,'cubic'); subplot (2,2,3) plot (x,y,'o',xx,y3); title ('三次插值'); % 三次样条插值 y4=interp1 (x,y,xx,'spline'); subplot (2,2,4) plot (x,y,'o',xx,y4); title ('三次样条插值'); % 插值基点为网格节点 clear all y=20:-1:0; x=0:20; z=[0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.4 0.3 0.2 0.3 0.2 0.1 0.2 0.2 0.4 0.3 0.2 0.2 0.2 0.2; 0.3 0.2 0.2 0.2 0.2 0.4 0.3 0.3 0.3 0.3 0.4 0.2 0.2 0.2 0.2 0.4 0.4 0.4 0.3 0.2 0.2; 0.2 0.3 0.3 0.2 0.3 1 0.4 0.5 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.6 0.5 0.4 0.4 0.2 0.2; 0.2 0.2 0.4 0.2 1 1.1 0.9 0.4 0.3 0.3 0.5 0.3 0.2 0.2 0.2 0.7 0.3 0.6 0.6 0.3 0.4; 0.2 0.2 0.9 0.7 1 1 1 0.7 0.5 0.3 0.2 0.2 0.2 0.6 0.2 0.8 0.7 0.9 0.5 0.5 0.4; 0.2 0.3 1 1 1 1.2 1 1.1 0.8 0.3 0.2 0.2 0.2 0.5 0.3 0.6 0.6 0.8 0.7 0.6 0.5; 0.2 0.4 1 1 1.1 1.1 1.1 1.1 0.6 0.3 0.4 0.4 0.2 0.7 0.5 0.9 0.7 0.4 0.9 0.8 0.3;

数学建模源代码

灰色系统理论建模源代码 function GM1_1(X0) %format long ; [m,n]=size(X0); X1=cumsum(X0); %累加 X2=[]; for i=1:n-1 X2(i,:)=X1(i)+X1(i+1); end B=-0.5.*X2 ; t=ones(n-1,1); B=[B,t] ; % 求B矩阵 YN=X0(2:end) ; P_t=YN./X1(1:(length(X0)-1)) %对原始数据序列X0进行准光滑性检验, %序列x0的光滑比P(t)=X0(t)/X1(t-1) A=inv(B.'*B)*B.'*YN.' ; a=A(1) u=A(2) c=u/a ; b=X0(1)-c ; X=[num2str(b),'exp','(',num2str(-a),'k',')',num2str(c)]; strcat('X(k+1)=',X) %syms k; for t=1:length(X0) k(1,t)=t-1; end k Y_k_1=b*exp(-a*k)+c; for j=1:length(k)-1 Y(1,j)=Y_k_1(j+1)-Y_k_1(j); end XY=[Y_k_1(1),Y] %预测值 CA=abs(XY-X0) ; %残差数列 Theta=CA %残差检验绝对误差序列 XD_Theta= CA ./ X0 %残差检验相对误差序列 AV=mean(CA); % 残差数列平均值 R_k=(min(Theta)+0.5*max(Theta))./(Theta+0.5*max(Theta)) ;% P=0.5 R=sum(R_k)/length(R_k) %关联度 Temp0=(CA-AV).^2 ; Temp1=sum(Temp0)/length(CA);

数学建模代码汇总复习进程

数学建模代码汇总

插值 % 产生原始数据 x=0:0.1:1; y=(x.^2-3*x+7).*exp (-4*x).*sin (2*x); % 线性插值 xx=0:0.01:1; y1=interp1 (x,y,xx,'linear'); subplot (2,2,1) plot (x,y,'o',xx,y1); title ('线性插值'); % 最邻近点插值 y2=interp1 (x,y,xx,'nearest'); subplot (2,2,2) plot (x,y,'o',xx,y2); title ('最邻近点插值'); % 三次插值 y3=interp1 (x,y,xx,'cubic'); subplot (2,2,3) plot (x,y,'o',xx,y3); title ('三次插值'); % 三次样条插值 y4=interp1 (x,y,xx,'spline'); subplot (2,2,4) plot (x,y,'o',xx,y4); title ('三次样条插值'); % 插值基点为网格节点 clear all y=20:-1:0; x=0:20; z=[0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.4 0.3 0.2 0.3 0.2 0.1 0.2 0.2 0.4 0.3 0.2 0.2 0.2 0.2; 0.3 0.2 0.2 0.2 0.2 0.4 0.3 0.3 0.3 0.3 0.4 0.2 0.2 0.2 0.2 0.4 0.4 0.4 0.3 0.2 0.2;

0.2 0.3 0.3 0.2 0.3 1 0.4 0.5 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.6 0.5 0.4 0.4 0.2 0.2; 0.2 0.2 0.4 0.2 1 1.1 0.9 0.4 0.3 0.3 0.5 0.3 0.2 0.2 0.2 0.7 0.3 0.6 0.6 0.3 0.4; 0.2 0.2 0.9 0.7 1 1 1 0.7 0.5 0.3 0.2 0.2 0.2 0.6 0.2 0.8 0.7 0.9 0.5 0.5 0.4; 0.2 0.3 1 1 1 1.2 1 1.1 0.8 0.3 0.2 0.2 0.2 0.5 0.3 0.6 0.6 0.8 0.7 0.6 0.5; 0.2 0.4 1 1 1.1 1.1 1.1 1.1 0.6 0.3 0.4 0.4 0.2 0.7 0.5 0.9 0.7 0.4 0.9 0.8 0.3; 0.2 0.2 0.9 1.1 1.2 1.2 1.1 1.1 0.6 0.3 0.5 0.3 0.2 0.4 0.3 0.7 1 0.7 1.2 0.8 0.4; 0.2 0.3 0.4 0.9 1.1 1 1.1 1.1 0.7 0.4 0.4 0.4 0.3 0.5 0.5 0.8 1.1 0.8 1.1 0.9 0.3; 0.3 0.3 0.5 1.2 1.2 1.1 1 1.2 0.9 0.5 0.6 0.4 0.6 0.6 0.3 0.6 1.2 0.8 1 0.8 0.5; 0.3 0.5 0.9 1.1 1.1 1 1.2 1 0.8 0.7 0.5 0.6 0.4 0.5 0.4 1 1.3 0.9 0.9 1 0.8; 0.3 0.5 0.6 1.1 1.2 1 1 1.1 0.9 0.4 0.4 0.5 0.5 0.8 0.6 0.9 1 0.5 0.8 0.8 0.9; 0.4 0.5 0.4 1 1.1 1.2 1 0.9 0.7 0.5 0.6 0.3 0.6 0.4 0.6 1 1 0.6 0.9 1 0.7; 0.3 0.5 0.8 1.1 1.1 1 0.8 0.7 0.7 0.4 0.5 0.4 0.4 0.5 0.4 1.1 1.3 0.7 1 0.7 0.6; 0.3 0.5 0.9 1.1 1 0.7 0.7 0.4 0.6 0.4 0.4 0.3 0.5 0.5 0.3 0.9 1.2 0.8 1 0.8 0.4; 0.2 0.3 0.6 0.9 0.8 0.8 0.6 0.3 0.4 0.5 0.4 0.5 0.4 0.2 0.5 0.5 1.3 0.6 1 0.9 0.3; 0.2 0.3 0.3 0.7 0.6 0.6 0.4 0.2 0.3 0.5 0.8 0.8 0.3 0.2 0.2 0.8 1.3 0.9 0.8 0.8 0.4; 0.2 0.3 0.3 0.6 0.3 0.4 0.3 0.2 0.2 0.3 0.6 0.4 0.3 0.2 0.4 0.3 0.8 0.6 0.7 0.4 0.4; 0.2 0.3 0.4 0.4 0.2 0.2 0.2 0.3 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.5 0.7 0.4 0.4 0.3 0.3; 0.2 0.2 0.3 0.2 0.2 0.3 0.2 0.2 0.2 0.2 0.2 0.1 0.2 0.4 0.3 0.6 0.5 0.3 0.3 0.3 0.2; 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.7 0.4 0.2 0.4 0.5 0.5]; % 未插值直接画图 figure (1) % 创建图形窗口1,并激活 surf (x,y,z);

数学建模参赛真实经验(强烈推荐)

数学建模参赛真实经验(强烈推荐) 本文档节选自: Matlab在数学建模中的应用,卓金武等编著,北航出版社,2011年4月出版 以下内容根据作者的讲座整理出来,多年数学建模实践经历证明这些经验对数学建模参赛队员非常有帮助,希望大家结合自己的实践慢慢体会总结,并祝愿大家在数学建模和Matlab世界能够找到自己的快乐和价值所在。 一、如何准备数学建模竞赛 一般,可以把参加数学建模竞赛的过程分成三个阶段:第一阶段,是个人的入门和积累阶段,这个阶段关键看个人的主观能动性;第二阶段,就是通常各学校都进行的集训阶段,通过模拟实战来提高参赛队员的水平;第三阶段是实际比赛阶段。这里讲的如何准备数学建模竞赛是针对第一阶段来讲的。 回顾作者自己的参赛过程,认为这个阶段是真正的学习阶段,就像是修炼内功一样,如果在这个阶段打下深厚的基础,对后面的两个阶段非常有利,也是个人是否能在建模竞赛中占优势的关键阶段。下面就分几个方面谈一下如何准备数学建模竞赛。 首先是要有一定的数学基础,尤其是良好的数学思维能力。并不是数学分数高就说明有很高的数学思维能力,但扎实的数学知识是数学思维的根基。对大学生来说,有高等数学、概率和线性代数就够了,当然其它数学知识知道的越多越好了,如图论、排队论、泛函等。我大一下学期开始接触数学建模,大学的数学课程只学习过高等数学。说这一点,主要想说明只要数学基础还可以,平时的数学考试都能在80分以上就可以参加数学建模竞赛了,数学方面的知识可以在以后的学习中逐渐去提高,不必刻意去补充单纯的数学理论。 真正准备数学建模竞赛应该从看数学建模书籍开始,要知道什么是数学建模,有哪些常见的数学模型和建模方法,知道一些常见的数学建模案例,这些方面都要通过看建模方面的书籍而获得。现在数学建模的书籍也比较多,图书馆和互联网上都有丰富的数学建模资料。作者认为姜启源、谢金星、叶齐孝、朱道元等老师的建模书籍都非常的棒,可以先看二三本。刚开始看数学建模书籍时,一定会有很多地方看不懂,但要知道基本思路,时间长了就知道什么问题用什么建模方法求解了。这里面需要提的一点是,运筹学与数学建模息息相关,最好再看一二本运筹学著作,仍然可以采取诸葛亮的看书策略,只观其大略就可以了,等知道需要具体用哪块知识后,再集中精力将其消化,然后应用之。 大家都知道,参加数学建模竞赛一定要有些编程功底,当然现在有Matlab这种强大的工程软件,对编程的的要求就降低了,至少入门容易多了,因为很容易用1条Matlab命令解决以前要用20行C语言才能实现的功能。因为Matlab的强大功能,Matlab在数学建模中已经有了非常广泛的应用,在很多学校,数学建模队员必须学习Matlab。当然Matlab的入门也非常容易,只要有本Matlab参考书,照猫画虎可以很快实现一些基本的数学建模功能,如数据处理、绘图、计算等。我的一个队友,当年用一天时间把一本二百多页的Matlab 教程操作完了,然后在经常运用中,慢慢地就变成了一名Matlab高手了。 对于有些编程基础的同学,最好再看一些算法方面的书籍,了解常见的数据结构和基本

09年数学建模A题(含代码)

承诺书 我们仔细阅读了中国大学生数学建模竞赛的竞赛规则. 我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。 我们知道,抄袭别人的成果是违反竞赛规则的, 如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。 我们郑重承诺,严格遵守竞赛规则,以保证竞赛的公正、公平性。如有违反竞赛规则的行为,我们将受到严肃处理。 我们参赛选择的题号是(从A/B/C/D中选择一项填写): A 我们的参赛报名号为(如果赛区设置报名号的话): 所属学校(请填写完整的全名):华南师范大学增城学院 参赛队员(打印并签名) :1. 何高志 2. 曾庆东 3. 曾利 指导教师或指导教师组负责人(打印并签名): 日期: 2013 年 8 月 16 日赛区评阅编号(由赛区组委会评阅前进行编号):

编号专用页 赛区评阅编号(由赛区组委会评阅前进行编号): 全国统一编号(由赛区组委会送交全国前编号):全国评阅编号(由全国组委会评阅前进行编号):

制动器试验台的控制方法分析 摘要 本文在专门的汽车行车制动器试验台上对所设计的路试进行模拟试验,检测汽车的行车制动器的综合性能,检验设计的优劣。针对此问题,我们结合实际,对转动惯量、补偿惯量、驱动电流、控制方法等问题作了深入详细的分析,建立了相应的数学模型,较好地解决了制动器试验台的控制方法分析问题,并且对模型和结果进行了评价和分析。 对于问题1,根据转动惯量的表达式,结合力学知识,代入数据从而求得车辆单个前轮滚动的等效转动惯量约为522m kg ?。 对于问题2,首先需要理解机械惯量与飞轮单个惯量、基础惯量和电动机补偿惯量之间的关系。根据题意,进行推断,可知机械惯量是组合问题。即飞轮组与基础惯量可以组合8种数值的机械惯量。问题1中得到等效的转动惯量522m kg ?,且电动机能补偿的能量有限,所以符合题意,在范围内的有2种,分别为飞轮1加基础惯量;飞轮2加基础惯量。且可得需要电动机补偿的惯量分别为122m kg ?,-182m kg ?。 对于问题3,飞轮做圆周运动根据角速度与线速度、半径的关系,结合问题2中得出符合题意的补偿惯量,联立转动定律,可求得其扭矩。且电动机的驱动电流与其产生的扭矩成正比,比例系数取为1.5m N A ?,因此可求得驱动电流分别为。;A I A I 05.2629.17421-== 对于问题4,我们使用Matlab 软件画出扭矩随时间、转速随时间的变化曲线,由此可知转速与时间近似成一次函数的关系,且汽车在制动的时候载荷是一个恒定不变的力,即角加速度恒定不变,方向与其运动方向相反,所以做匀减速运动。通过Lingo 软件进行具体数值处理,根据能量守恒,转动动能,可知飞轮组产生的能量供给不足,需要电动机补偿供给。对该控制方法进行评价的标准是能量误差,我们计算的能量误差为5.53%,相对较小,接近实际情况。 对于问题5,根据问题3的数学模型,已知前一个时间段的瞬时转速与瞬时扭矩,结合转动定律,使用Matlab 进行拟合,得前一个时间段的转动惯量J 与时间的函数。把现阶段的时间段平均分为足够小,可视为瞬时时间,代入即可得现阶段转动惯量J ,再结合驱动电流与扭矩成正比,因此可求得驱动电流。评价: n 和拟合的次数都是可以在现阶段自行设置的,该方法的确信性是可以控制的,且可行的。 对于问题6,根据问题5的控制方法的不足之处进行改进,提高该计算机控制方法的精确性。我们可以使角加速度精确即对角加速度进行拟合,并可通过增加其驱动电流来完善该计算机的控制方法。评价:对角速度进行了细化,提高结果的准确性。 关键词:转动惯量 机械惯量 补偿惯量 曲线拟合 转动动能

数学建模B题 含代码

2013高教社杯全国大学生数学建模竞赛 承诺书 我们仔细阅读了中国大学生数学建模竞赛的竞赛规则. 我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。 我们知道,抄袭别人的成果是违反竞赛规则的, 如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。 我们郑重承诺,严格遵守竞赛规则,以保证竞赛的公正、公平性。如有违反竞赛规则的行为,我们将受到严肃处理。 我们参赛选择的题号是(从A/B/C/D中选择一项填写): B 我们的参赛报名号为(如果赛区设置报名号的话): 所属学校(请填写完整的全名):华南师范大学增城学院 参赛队员(打印并签名) :1. 2. 3. 指导教师或指导教师组负责人(打印并签名): 日期:年月日

赛区评阅编号(由赛区组委会评阅前进行编号):

2013高教社杯全国大学生数学建模竞赛 编号专用页 赛区评阅编号(由赛区组委会评阅前进行编号): 全国统一编号(由赛区组委会送交全国前编号):全国评阅编号(由全国组委会评阅前进行编号):

DVD在线租赁 摘要 问题(三):题目需要我们回答购买各种DVD的数量来使95%的会员能看到他DVD想看到的DVD,并且要怎么分配才能使满意度达到最大;每种建立以总的购买数最小、会员满意度最大为双目标的规划模型。通过确定在一个月内每张DVD的在每个会员中手中的使用率;然后通过c语言程序编程来确定每种DVD 的购买量;建立0-1规划模型;通过LINGO软件使满意度达到最大,来最终确定DVD的分配; 一级,二级目标,将多目标规划转化为单目标;同时将第j种DVD的购买量y的整数约束去掉,求解出最小购买数为张。将最小购买数作为约束条件,优j 化满意度后,得到最大满意度为95%;然后对此时DVD的购买量 y向上取整,得 j 到总购买数为186张。当购买数为186张时,会员满意度达到97%。 三、模型假设 1、租赁周期为一个月,每月租两次的会员可以在月中再租赁一次; 2、同一种DVD每人只能租赁一次; 3、DVD在租赁过程中无损坏; 4、会员每月至少交一次订单; 5、会员只有把前一次所借的DVD寄回,才可以继续下一次租赁 6、月底DVD全部收回,继续下个周期的租赁; 7、随着时间的推移,该网站的会员们的流动情况不会出现大变动。 四、符号说明

2015数学建模选修大作业

中华女子学院 成绩2014 — 2015学年第二学期期末考试 (论文类) 论文题目数学建模算法之蒙特卡罗算法 课程代码1077080001 课程名称数学建模 学号130801019

姓名陈可心 院系计算机系 专业计算机科学与技术 考试时间2015年5月27日 一、数学建模十大算法 1、蒙特卡罗算法 该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟可以来检验自己模型的正确性,是比赛时必用的方法。接下来本文将着重介绍这一算法。 2、数据拟合、参数估计、插值等数据处理算法 比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用Matlab作为工具。 3、线性规划、整数规划、多元规划、二次规划等规划类问题 建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用Lindo、Lingo软件实现。这个也是我们数学建模选修课时主要介绍的问题,所以对这方面比较熟悉,也了解了Lindo、Lingo软件的基本用法。 4、图论算法 这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,上学期数据结构课程以及离散数学课程中都有介绍。它提供了对很多问题都很有效的一种简单而系统的建模方式。

5、动态规划、回溯搜索、分治算法、分支定界等计算机算法 这些算法是算法设计中比较常用的方法,很多场合可以用到竞赛中 6、最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法 这些问题是用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是算法的实现比较困难,需慎重使用。 7、网格算法和穷举法 网格算法和穷举法都是暴力搜索最优点的算法,在很多竞赛题中有应用,当重点讨论模型本身而轻视算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具。 8、一些连续离散化方法 很多问题都是实际来的,数据可以是连续的,而计算机只认的是离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的。 9、数值分析算法 如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用。10、图象处理算法 赛题中有一类问题与图形有关,即使与图形无关,论文中也应该要不乏图片的,这些图形如何展示以及如何处理就是需要解决的问题,通常使用Matlab进行处理。 二、蒙特卡罗方法 2.1算法简介 蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,1946年,美国拉斯阿莫斯国家实验室的三位科学家John von Neumann,Stan Ulam 和 Nick

数学建模参赛真实经验总结

数学建模参赛真实经验 一、如何准备数学建模竞赛 一般,可以把参加数学建模竞赛的过程分成三个阶段:第一阶段,是个人的入门和积累阶段,这个阶段关键看个人的主观能动性;第二阶段,就是通常各学校都进行的集训阶段,通过模拟实战来提高参赛队员的水平;第三阶段是实际比赛阶段。这里讲的如何准备数学建模竞赛是针对第一阶段来讲的。 回顾作者自己的参赛过程,认为这个阶段是真正的学习阶段,就像是修炼内功一样,如果在这个阶段打下深厚的基础,对后面的两个阶段非常有利,也是个人是否能在建模竞赛中占优势的关键阶段。下面就分几个方面谈一下如何准备数学建模竞赛。 首先是要有一定的数学基础,尤其是良好的数学思维能力。并不是数学分数高就说明有很高的数学思维能力,但扎实的数学知识是数学思维的根基。对大学生来说,有高等数学、概率和线性代数就够了,当然其它数学知识知道的越多越好了,如图论、排队论、泛函等。我大一下学期开始接触数学建模,大学的数学课程只学习过高等数学。说这一点,主要想说明只要数学基础还可以,平时的数学考试都能在80分以上就可以参加数学建模竞赛了,数学方面的知识可以在以后的学习中逐渐去提高,不必刻意去补充单纯的数学理论。 真正准备数学建模竞赛应该从看数学建模书籍开始,要知道什么是数学建模,有哪些常见的数学模型和建模方法,知道一些常见的数学建模案例,这些方面都要通过看建模方面的书籍而获得。现在数学建模的书籍也比较多,图书馆和互联网上都有丰富的数学建模资料。作者认为姜启源、谢金星、叶齐孝、朱道元等老师的建模书籍都非常的棒,可以先看二三本。刚开始看数学建模书籍时,一定会有很多地方看不懂,但要知道基本思路,时间长了就知道什么问题用什么建模方法求解了。这里面需要提的一点是,运筹学与数学建模息息相关,最好再看一二本运筹学著作,仍然可以采取诸葛亮的看书策略,只观其大略就可以了,等知道需要具体用哪块知识后,再集中精力将其消化,然后应用之。 大家都知道,参加数学建模竞赛一定要有些编程功底,当然现在有Matlab这种强大的工程软件,对编程的的要求就降低了,至少入门容易多了,因为很容易用1条Matlab命令

数学建模-最小生成树-kruskal算法及各种代码

创作编号: GB8878185555334563BT9125XW 创作者:凤呜大王* kruskal算法及代码 ---含伪代码、c代码、matlab、pascal等代码 K r u s k a l算法每次选择n- 1条边,所使用的贪婪准则是:从剩下的边中选择一条不会产生环路的具有最小耗费的边加入已选择的边的集合中。注意到所选取的边若产生环路则不可能形成一棵生成树。K r u s k a l算法分e 步,其中e 是网络中边的数目。按耗费递增的顺序来考虑这e 条边,每次考虑一条边。当考虑某条边时,若将其加入到已选边的集合中会出现环路,则将其抛弃,否则,将它选入。 目录 Kruskal算法 Kruskal算法的代码实现 Kruskal算法 Kruskal算法的代码实现 算法定义 克鲁斯卡尔算法 假设 WN=(V,{E}) 是一个含有 n 个顶点的连通网,则按照克鲁斯卡尔算法构造最小生成树的过程为:先构造一个只含 n 个顶点,而边集为空的子图,若将该子图中各个顶点看成是各棵树上的根结点,则它是一个含有 n 棵树的一个森林。之后,从网的边集 E 中选取一条权值最小的边,若该条边的两个顶点分属不同的树,则将其加入子图,也就是说,将这两个顶点分别所在的两棵树合成一棵树;反之,若该条边的两个顶点已落在同一棵树上,则不可取,而应该取下一条权值最小的边再试之。依次类推,直至森林中只有一棵树,也即子图中含有 n-1条边为止。

举例描述 克鲁斯卡尔算法(Kruskal's algorithm)是两个经典的最小生成树算法的较为简单理解的一个。这里面充分体现了贪心算法的精髓。大致的流程可以用一个图来表示。这里的图的选择借用了Wikipedia上的那个。非常清晰且直观。 首先第一步,我们有一张图,有若干点和边 如下图所示: 第一步我们要做的事情就是将所有的边的长度排序,用排序的结果作为我们选择边的依据。这里再次体现了贪心算法的思想。资源排序,对局部最优的资源进行选择。 排序完成后,我们率先选择了边AD。这样我们的图就变成了 第二步,在剩下的变中寻找。我们找到了CE。这里边的权重也是5

数学建模-最小生成树-kruskal算法及各种代码

kruskal算法及代码 ---含伪代码、c代码、matlab、pascal等代码 K r u s k a l算法每次选择n- 1条边,所使用的贪婪准则是:从剩下的边中选择一条不会产生环路的具有最小耗费的边加入已选择的边的集合中。注意到所选取的边若产生环路则不可能形成一棵生成树。K r u s k a l算法分e 步,其中e 是网络中边的数目。按耗费递增的顺序来考虑这e 条边,每次考虑一条边。当考虑某条边时,若将其加入到已选边的集合中会出现环路,则将其抛弃,否则,将它选入。 目录 Kruskal算法 Kruskal算法的代码实现 Kruskal算法 Kruskal算法的代码实现 算法定义 克鲁斯卡尔算法 假设 WN=(V,{E}) 是一个含有 n 个顶点的连通网,则按照克鲁斯卡尔算法构造最小生成树的过程为:先构造一个只含 n 个顶点,而边集为空的子图,若将该子图中各个顶点看成是各棵树上的根结点,则它是一个含有 n 棵树的一个森林。之后,从网的边集 E 中选取一条权值最小的边,若该条边的两个顶点分属不同的树,则将其加入子图,也就是说,将这两个顶点分别所在的两棵树合成一棵树;反之,若该条边的两个顶点已落在同一棵树上,则不可取,而应该取下一条权值最小的边再试之。依次类推,直至森林中只有一棵树,也即子图中含有n-1条边为止。 举例描述 克鲁斯卡尔算法(Kruskal's algorithm)是两个经典的最小生成树算法的较为简单理解的一个。这里面充分体现了贪心算法的精髓。大致的流程可以用一个图来表示。这里的图的选择借用了Wikipedia上的那个。非常清晰且直观。 首先第一步,我们有一张图,有若干点和边 如下图所示:

2014美国数学建模竞赛 MCM A题 元胞自动机完整代码

clf clear all %build the GUI %define the plot button plotbutton=uicontrol('style','pushbutton',... 'string','Run', ... 'fontsize',12, ... 'position',[100,400,50,20], ... 'callback', 'run=1;'); %define the stop button erasebutton=uicontrol('style','pushbutton',... 'string','Stop', ... 'fontsize',12, ... 'position',[200,400,50,20], ... 'callback','freeze=1;'); %define the Quit button quitbutton=uicontrol('style','pushbutton',... 'string','Quit', ... 'fontsize',12, ... 'position',[300,400,50,20], ... 'callback','stop=1;close;'); number = uicontrol('style','text', ... 'string','1', ... 'fontsize',12, ... 'position',[20,400,50,20]); %CA setup n=100;%数据初始化 z=zeros(1,n);%元胞个数 z=roadstart(z,5);%道路状态初始化,路段上随机分布5辆 cells=z; vmax=3;%最大速度 v=speedstart(cells,vmax);%速度初始化 x=1;%记录速度和车辆位置 memor_cells=zeros(3600,n); memor_v=zeros(3600,n); imh=imshow(cells);%初始化图像白色有车,黑色空元胞 set(imh, 'erasemode', 'none') axis equal axis tight stop=0; %wait for a quit button push run=0; %wait for a draw freeze=0; %wait for a freeze(冻结) while (stop==0) if(run==1) %边界条件处理,搜素首末车,控制进出,使用开口条件 a=searchleadcar(cells); b=searchlastcar(cells); [cells,v]=border_control(cells,a,b,v,vmax); i=searchleadcar(cells);%搜索首车位置 for j=1:i if i-j+1==n [z,v]=leadcarupdate(z,v);

数学建模训练习题(含代码程序)

5组 于金龙 王超 焦艳彬 快速评卷策略 摘要 本文研究的是快速评卷问题,在保证准确率和公平公正的原则下,使每位评卷人评阅的试卷总数最小,即满足总的工作量最小。为解决该问题,在考虑系统误差的前提下,本文建立了多目标优化模型和圆桌评卷模型,利用计算机仿真,建立了以下两种方案,并验证了方案的合理性。 对于方案一,采取了截至分数线淘汰制,每一轮我们将试卷尽可能的平均分成8份,根据该轮试卷的期望值设定一个截至分数线,淘汰分数线以下的所有试卷,剩下的试卷带编号进入下一轮。当最后的试卷数在2W 附近时,停止进行下一轮仿真,将2W 左右份试卷分给每一位评卷老师进行评阅打分,然后各试卷取平均分进行排名,取前三名为最终优胜者,并记录这三份试卷的编号进行对应。最后我们通过对上述批卷次数进行统计,一组仿真结果如下: 总阅卷次数 平均阅卷次数 准确率 218 27 97.1% 对于方案二,采用了圆桌评卷模型,将所有试卷尽可能平均分成8份(对应8位带有标号的评卷老师),以第一份试卷为例,首先由第一位老师进行评分,淘汰60%,将余下试卷(含试卷标号)交给右手边的第二位老师进行评分,然后将评分与第一位老师的评分取平均值进行排名,淘汰40%,传给右手边的第三位老师进行评分,按照上一回合的排名制继续淘汰,直至该份试卷只剩下一个则不再淘汰。将这个试卷依次交给右手边未评过此卷的老师,进行平均打分,最后得出此份中的最优试卷分数及标号。同样方法,得到剩余7份试卷各自的最优试卷份数及标号,最后对所得8份试卷进行排名,取成绩较高者前三名为优胜试卷,并记录这三份试卷的标号,统计评卷总次数,一组仿真结果如下: 总阅卷次数 平均阅卷次数 准确率 212 26.5 98.3% 最后对方案进行分析和改进,对于三种变量:试卷数量、评卷人数和优胜者数量,当其中两种变量不变,调整第三变量时,观察各方案准确率的浮动,得出三者变动规律,寻求出最优评卷策略。 关键字关键字::计算机仿真 圆桌模型 系统误差 多目标优化

2011数学建模全国赛a题代码

clc,clear A=xlsread('cumcm2011A附件_数据.xls','附件1','A4:E322'); C=xlsread('cumcm2011A附件_数据.xls','附件2','A4:I322'); x=A(:,2);y=A(:,3);z=A(:,4);qy=A(:,5); As=C(:,2);Cd=C(:,3);Cr=C(:,4);Cu=C(:,5); Hg=C(:,6);Ni=C(:,7);Pb=C(:,8);Zn=C(:,9); [X,Y,Z]=griddata(x,y,z,linspace(0,28654)',linspace(0,18449),'v4'); figure,contourf(X,Y,Z) title('采样地形图'); [X,Y,AS]=griddata(x,y,As,linspace(0,28654)',linspace(0,18449),'v4'); figure,contourf(X,Y,AS) title('As浓度随平面地形分布图'); [X,Y,CD]=griddata(x,y,Cd,linspace(0,28654)',linspace(0,18449),'v4'); figure,contourf(X,Y,CD) title('Cd浓度随平面地形分布图'); [X,Y,CR]=griddata(x,y,Cr,linspace(0,28654)',linspace(0,18449),'v4'); figure,contourf(X,Y,CR) title('Cr浓度随平面地形分布图'); [X,Y,CU]=griddata(x,y,Cu,linspace(0,28654)',linspace(0,18449),'v4'); figure,contourf(X,Y,CU) title('Cu浓度随平面地形分布图'); [X,Y,NI]=griddata(x,y,Ni,linspace(0,28654)',linspace(0,18449),'v4'); figure,contourf(X,Y,NI) title('Ni浓度随平面地形分布图'); [X,Y,HG]=griddata(x,y,Hg,linspace(0,28654)',linspace(0,18449),'v4'); figure,contourf(X,Y,HG) title('Hg浓度随平面地形分布图'); [X,Y,PB]=griddata(x,y,Pb,linspace(0,28654)',linspace(0,18449),'v4'); figure,contourf(X,Y,PB) title('Pb浓度随平面地形分布图'); [X,Y,ZN]=griddata(x,y,Zn,linspace(0,28654)',linspace(0,18449),'v4'); figure,contourf(X,Y,ZN) title('Zn浓度随平面地形分布图'); [X,Y,QY]=griddata(x,y,qy,linspace(0,28654)',linspace(0,18449),'v4');

数学建模A题(含代码)

2018高教社杯全国大学生数学建模竞赛 承诺书 我们仔细阅读了中国大学生数学建模竞赛的竞赛规则. 我们完全明白,在竞赛开始后参赛队员不能以任何方式<包括电话、电子邮件、网上咨询等)与队外的任何人<包括指导教师)研究、讨论与赛题有关的问题。b5E2RGbCAP 我们知道,抄袭别人的成果是违反竞赛规则的, 如果引用别人的成果或其他公开的资料<包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。p1EanqFDPw 我们郑重承诺,严格遵守竞赛规则,以保证竞赛的公正、公平性。如有违反竞赛规则的行为,我们将受到严肃处理。DXDiTa9E3d 我们参赛选择的题号是<从A/B/C/D中选择一项填写):A 我们的参赛报名号为<如果赛区设置报名号的话):所属学校<请填写完整的全名):华南师范大学增城学院 参赛队员 (打印并签名> :1. 何高志 2. 曾庆东 3. 曾利 指导教师或指导教师组负责人 (打印并签名>: 日期:2018 年8月16日

赛区评阅编号<由赛区组委会评阅前进行编号):

2018高教社杯全国大学生数学建模竞赛 编号专用页 赛区评阅编号<由赛区组委会评阅前进行编号): 全国评阅编号<由全国组委会评阅前进行编号):

制动器实验台的控制方法分析 摘要 本文在专门的汽车行车制动器实验台上对所设计的路试进行模拟实验,检测汽车的行车制动器的综合性能,检验设计的优劣。针对此问题,我们结合实际,对转动惯量、补偿惯量、驱动电流、控制方法等问题作了深入详细的分析,建立了相应的数学模型,较好地解决了制动器实验台的控制方法分析问题,并且对模型和结果进行了评价和分析。RTCrpUDGiT 对于问题1,根据转动惯量的表达式,结合力学知识,代入数据 从而求得车辆单个前轮滚动的等效转动惯量约为52。5PCzVD7HxA 对于问题2,首先需要理解机械惯量与飞轮单个惯量、基础惯量和电动机补偿惯量之间的关系。根据题意,进行推断,可知机械惯量是组合问题。即飞轮组与基础惯量可以组合8种数值的机械惯量。问题1中得到等效的转动惯量52,且电动机能补偿的能量有限,所以符合题意,在范围内的有2种,分别为飞轮1加基础惯量;飞轮2加基础惯量。且可得需要电动机补偿的惯量分别为12,-18。jLBHrnAILg 对于问题3,飞轮做圆周运动根据角速度与线速度、半径的关系,结合问题2中得出符合题意的补偿惯量,联立转动定律,可求得其扭矩。且电动机的驱动电流与其产生的扭矩成正比,比例系数

数学建模算法C语言示例

【分享】常用算法设计方法 常用算法设计方法 在网上找到这篇《常用算法设计方法》,虽然代码是C 的,但是算法的原理都一样吧。常用算法设计方法 要使计算机能完成人们预定的工作,首先必须为如何完成预定的工作设计一个算法,然后再 根据算法编写程序。计算机程序要对问题的每个对象和处理规则给出正确详尽的描述,其中 程序的数据结构和变量用来描述问题的对象,程序结构、函数和语句用来描述问题的算法。算法数据结构是程序的两个重要方面。 算法是问题求解过程的精确描述,一个算法由有限条可完全机械地执行的、有确定结果的指令组成。指令正确地描述了要完成的任务和它们被执行的顺序。计算机按算法指令所描述的 顺序执行算法的指令能在有限的步骤内终止,或终止于给出问题的解,或终止于指出问题对此输入数据无解。 通常求解一个问题可能会有多种算法可供选择,选择的主要标准是算法的正确性和可靠性,简单性和易理解性。其次是算法所需要的存储空间少和执行更快等。 算法设计是一件非常困难的工作,经常采用的算法设计技术主要有迭代法、穷举搜索法、递推法、贪婪法、回溯法、分治法、动态规划法等等。另外,为了更简洁的形式设计和藐视算法,在算法设计时又常常采用递归技术,用递归描述算法。 一、迭代法 迭代法是用于求方程或方程组近似根的一种常用的算法设计方法。设方程为f(x)=0 ,用某种数学方法导出等价的形式x=g(x) ,然后按以下步骤执行: (1)选一个方程的近似根,赋给变量x0; (2)将x0 的值保存于变量x1 ,然后计算g(x1) ,并将结果存于变量x0 ; (3)当x0 与x1 的差的绝对值还小于指定的精度要求时,重复步骤( 2)的计算。 若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的x0 就认为是方程的根。上述算法用C 程序的形式表示为: 【算法】迭代法求方程的根 { x0= 初始近似根; do { x1=x0; x0=g(x1) ;/* 按特定的方程计算新的近似根*/ } while ( fabs(x0-x1)>Epsilon) ;printf( “方程的近似根是%f\n ”,x0) ;

新版数学建模—垃圾运输问题的求解及源代码

垃圾运输问题 *** 信息工程学院计算机应用专业 ********** 摘要:本文通过对垃圾站点之间分布位置的分析,构造出解决垃圾运输问题的模型。 首先,我们对所给数据绘制其xy散点图,根据题设提出自己假设的条件,。 其次,结合已有的模型,对垃圾点之间的位置分布关系进行讨论及证明,从而确定最基本的行车路线原则。 然后,编写c语言程序,利用计算机进行算法的模拟,从而搜索出各运输车辆的数量以及最佳的分配方案,使得(1)在不考虑铲车的情况下运输费用最少、(2)考虑在有铲车的模型中的最佳解、(3)对不同运输量的运输车进行合理分配调度,使得总费用最少。 根据我们确定的解题思路,最终我们得到了一组可行解,如下: 第一问,求得全部的运输费用是2340.97元,花费的总时间是21.95小时; 第二问:求得需要3辆铲车; 第三问:求得总的运输费用是2323.77 元。其中8吨的车4辆,6吨的车3辆,4吨的车3辆。 具体的路线分配图,车辆调度图见正文部分。 本文讨论的解题方法模型简单,得出的结果只是一个近似最优解的可行解,所以还有很大的改进空间,比如我们可以采用更加智能的算法等。 关键词:计算机算法模拟优化 1.问题的重述 某城区有 37 个垃圾集中点,每天都要从垃圾处理厂(第 38号节点)出发将垃圾运回。现有一种载重 6 吨的运输车。每个垃圾点需要用 10 分钟的时间装车,运输车平均速度为40 公里/小时(夜里运输,不考虑塞车现象);每台车每日平均工作 4 小时。运输车重载运费 2 元 / 吨公里;运输车和装垃圾用的铲车空载费用 0.5 元 / 公里;并且假定街道方向均平行于坐标轴。请你给出满意的运输调度方案以及计算程序。 问题: 1.运输车应如何调度(需要投入多少台运输车,每台车的调度方案,运营费用) 2.铲车应如何调度(需要多少台铲车,每台铲车的行走路线,运营费用) 3.如果有载重量为 4 吨、 6 吨、 8 吨三种运输车,又如何调度? 2.模型的基本假设与符号说明 (一)基本假设 1.车辆在拐弯时的时间损耗忽略。 2.车辆在任意两站点中途不停车,保持稳定的速率。 3.只要平行于坐标轴即有街道存在。 4.无论垃圾量多少,都能在十分钟内装上运输车。 5.每个垃圾站点的垃圾只能由一辆运输车运载。 6. 假设运输车、铲车从A垃圾站到B垃圾站总走最短路线。 7. 任意两垃圾站间的最短路线为以两垃圾站连线为斜边的直角三角形的两直角边之和。 8. 建设在运输垃圾过程中没有新垃圾入站。 9. 假设铲车、运输车载工作途中不发生意外也不遇到意外;

相关主题
文本预览
相关文档 最新文档