matlab实验报告.docx

上传人:李司机 文档编号:6952045 上传时间:2024-03-26 格式:DOCX 页数:10 大小:87.96KB
返回 下载 相关 举报
matlab实验报告.docx_第1页
第1页 / 共10页
matlab实验报告.docx_第2页
第2页 / 共10页
matlab实验报告.docx_第3页
第3页 / 共10页
matlab实验报告.docx_第4页
第4页 / 共10页
matlab实验报告.docx_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《matlab实验报告.docx》由会员分享,可在线阅读,更多相关《matlab实验报告.docx(10页珍藏版)》请在三一办公上搜索。

1、实验报告课程运输与配送实验序号05实验项目班级姓名学号实验小组及成员实验成绩实验日期及时间实验地点实验目的1、学会最邻近法的内容;2、学会在MATLAB使用简单语言;3、学会MATLAB函数使用;4、学会使用MATLAB解决最邻近法问题。实验内容1、小组成员线上讨论构思解题思路;2、通过MATLAB软件制作一个最邻近法的函数,为某距离矩阵寻找一个初始的单回路配送路程。实验设备计算机、MATLAB软件实验步骤、结果、分析及总结一、实验分析及实验步骤1、学会最邻近法的内容最邻近法可以通过如下5步完成。(1)将起始点定位整个回路的起点;(2)找到刚加入到回路上离一个点最近的一个点,并将其加入到线路中

2、;(3)重复步骤(2),直到集合了所有节点都加入到线路中;(4)将最后加入的节点和起始点连接起来,形成回路;2、线上讨论,小组成员学会解决最邻近法问题案例有一食品公司,位置在VI处,每天用一辆车给固定区域内的5家超市送货,要求货车只能去每一个超市一次,送完货后返回公司,各点之间的距离如表所示其中距离具有对称性,设计一条最短路径。距离VlV2V3V4V5V6Vl986712V296151816实验步骤、结果、分析及总结V3861487V461514410V5718846V612167106解:(I)根据以上距离表格,将Vl做成起点,选择Vl到各点距离中的最短距离,即V4为第二个点,此时路径为【V

3、IV41O距离VlV2V3V4V5V6Vl986712V296151816V3861487V461514410V5718846V612167106(2)观察V4到各点的距离,找到最短距离V5点,此时路径为VIV4V5o距离VlV2V3V4V5V6Vl986712V296151816V3861487V461514410V5718846V612167106(3)因为V4点已经在路径上了,所以删除V4点,如下表。观察V5到各点的距离,找到最短距离V6点,此时路径为【V1V4V5V6L距离VlV2V3V5V6Vl98712V2961816V38687V571886V6121676(4)因为V5点已经在

4、路径上了,所以删除V5点,如下表。观察V6到各点的距离,找到最短距离V3点,此时路径为【VIV4V5V6V3o距离VlV2V3V6Vl9812V29616V3867V612167(5)因为V6点已经在路径上了,所以删除V6点,如下表,观察V3到各点的距离,找到最短距离V2点,此时路径为【VIV4V5V6V3V2o实验距离VlV2V3Vl98V296V386步骤、结果、分析及总(6)所以最后最短路径为【V1V4V5V6V3V2V1,总距离为6+4+6+7+6+9=38。2、线上讨论,通过MATLAB软件制作一个最邻近法的函数,为上述案例寻找一个初始的单回路配送路程小组成员讨论整理好思路,首先建立

5、一个矩阵。为防止原表格空格初始值影响实验最短路比较,将对角线上的数值设为MATLAB语言中表示无穷大的数值,即:Info方案一(纸上思路用MATLAB语言表达):(1)程序如下页图所示:实验步骤、 结果、 分析 及总结.IIIX.J.IIIZ-t.lllZ.IJIITe-inf 9867 12;9 inf 6 15 18 16:8 6 inf 14 8 7;6 15 14 inf 4 10;7 18 8 4al-A(l.:)%V】到各点的即岗(选收第mini, jll!5in(al)%Y1到哪点的跑离最小(第一行的最小值和所什列卜.林)A(:. jl) = %排除此点OM除最小值所在列)a2-

6、A(jl. :)%新加入路/的点(V4)到剩余各点的距离(选取新的-行)min2, j2-min(a2)%V4到哪点的距离鼓小(第四打的最小僮和所住列卜标A(L :)A( = ,j2。推除此点(跚除垃小值所住列)a3-A(j2,:)min3. J3nin(a3)A(j2, :)A(:, j3)a4-A(j3,:)min4. j4?mi(a4)A(j3, :)A(:, J4)=A(j4, :);inf 6:12 16 7 10 6 inf(2)存在的问题和解决办法问题:关于如何把已经加入到路线中的点排除,尝试把此点的行和列删除,运行过程虽然没有问题,但是运行结果与实际不符,如下图。这样后面在利用

7、下标“跳”到相应行去不仅最小值会出现错误,而且这样不知道实际上是把哪个点加到路线里了。mini=min2=min3=646al=A(l,:)mini, jl=min(al) 值和所在列下标)A(:, jl)=inf解决办法:为避免删除行列的数值对后续实验有影响,将矩阵中已经加入路线的点的所有数值都设为Inf(无穷大),因为是求最小值所以不会对后续运行有影响。(3)修改后的程序如下:A=Einf 9 8 6 7 12;9inf6151816;86inf1487;61514inf410;71884inf6;12167106inf%V1到各点的距离(选取第一行)%V1到哪一点的距离最小(第一行的最小

8、%排除此点(假设所有点到此点距离无穷远)实验a2=A(jl,:)取新的一行)min2,j2=min(a2)在列下标)A(:,j2)=inf%新加入路径的点到剩余各点的距离(选%此点到哪一点的距离最小(最小值和所%排除此点步骤、a3=A(j2,:)结果、min3,j3=min(a3)A(:,j3)=inf分析及总a4=A(j3,:)min4,j4=min(a4)结A(:,j4)=infa5=A(j4,:)min5,j5=min(a5)A(:,j5)=infa6=A(j5,:)min6,j6=min(a6)1.=minl+min2+min3+min4+min5+min6方案二(运用循环语句改进MA

9、TLAB程序,简洁语言)(1)循环次数已知,尝试利用for循环语句,程序如下所示:.e“ix-114.=inf986712;9inf6151816;86inf1487;61514inf410:718Ja=A(l,:)%V1到各点的距离(选取第行)min(min(a)%V1到哪一点的距掰技小值i,j=find(a=min(min(a)%最小值所在行、列卜林A(:,j)=inf财*除此点(假设所行点到此点即肉无穷远)forj=2:6a三A(j,:)min(min(a)ij三find(a=min(min(a)A(:,j)三inf;end存在问题:虽然for循环适用于已知循环次数,但是此次问题是不规律

10、的循环,不是按照特定步长来循环的,所以不能用for循环,换while循环语句。(2)尝试利用While循环语句Ajinf986712:9Inf6151816:86inf1487:61514inf4:lntlnflnflnflnflnfW)可”点弊七警.行);:;:;:;Inin(Bin)叫到哪XM却禽小值InfInfInfInfInfInf(i,jfind(a-min(三in(a)%以小值所住行、列卜标InfInfInfInfInfInfA(:,j)inf贴,除此点(会设所仃点到此点距国无,InfInfInfInfInfInfInfInfInfInfInfInf干”女、I;:;:;:;_a”(

11、I)InfInfInfInfInfInfQnin(三in(a)InfInfInfInfInfInfi.jJ三find(a=in(nin(a)InfInfInfInfInfInfA(:.j)三inf;InfInfInfInfInfInfendlntInfInfInfInfInfInfInfInfInfInfInf出现问题:程序进入死循环,因为循环条件错误,需要加入循环结实验束条件。(3)修改程序,运用WhiIe和if嵌套循环语句。步骤、根据上面的死循环可以看出最终循环结束时矩阵将会变成一个6*6结果、的无穷大矩阵,所以加入一个跳出循环的条件if(A=l./zeros(6),当矩阵为此时,循环结束

12、,程序如下:分析A=inf986712;9inf6151816;86inf1487;61514inf410;71884inf6;12167106inf及总a=A(l,:)%V1到各点的距离(选取第一行)结min(min(a)%V1到哪一点的距离最小值i,j=find(a=min(min(a)%最小值所在行、列下标A(:,j)=inf%排除此点(假设所有点到此点距离无穷远)sum=min(a)%距离和B=l,j%最短路while(j=6)%循环a=A(j,:)min(min(a)i,j=find(a=min(min(a)A(:,j)=inf;if(A=l./zeros(6)%1./zeros(6

13、)是6*6无穷大矩阵sum-sum+min(a)B=B,jbreak;endsum=summin(a)B=B,jEnd输出结果。二、实验结果1、修改后的方案一运行结果因为默认Vl是起点,所以在六个点中,VI也是终点。命令行向口实验步骤、结果、分析及总结叵IHA=Inf98InfInf12Inf9867129Inf6InfInf169Inf615181686InfInfInf186Inf148761514InfInf106 1514Inf4IO7188lnfInf67 1884Inf612167InfInfInf12167106Infa3=al=7188InfInf6Inf986712mini=

14、Bin3=6 6Jl=j3=7 6=,ftInf98InfInfInfInf98Inf7129Inf6Inf18169lnf6lnflnflnf86InfInf8786lnflnflnflnf61514Inf41061514lnflnflnf7188InfInf67188InfInfInf12167Inf6Inf12167InfInfInfa2=a4=61514lnf41012167InfInfInf二回“7j2=j4=53A=InfInfInfInfInfInfInf9InfInfInfInf9InfInfInfInfInf9InfInfInfInfInf8InfInfInfInfInf86

15、InfInfInfInf6InfInfInfInfInf615InfInfInfInf7InfInfInfInfInf12InfInfInfInfInf718InfInfInfInf1216InfInfInfInfa6三9InfInfInfInfInfa5=86InfInfInfInfin6实验Iilin5-IIJ69步骤、61j5=L-结果、238分析及总2、修改后的方案二运行结果如下:结A=A=Inf98Inf7129Inf6Inf1816Inf98671286InfInf8786Inf148761514Inf410615UInf4107188InfInf671884Inf612167In

16、f6Inf12167106Infa-sum=Inf986712ans三6B6HB=1=141a=J=61514Inf4104ans=B=4145i=a=17188InfInf实验ans=步骤、j=6结果、5i=分析sum=及总10j=结6sum=sum一1623.B=B=145614563a=a=12167InfInfInf86InfInfInfInfans=ans=76i=i=iij=j=3?实验步骤、结果、分析及总结叵Isum-38三、实验总结1、熟知MATLAB简单语言,例如(I,:)”是指i所在的行,“(:J)”是指j所在的列,“ans”表示结果,“sum”表示求和,“二”表示赋值,J

17、=”表示等于。2、了解Inf在MATLAB中代表无穷大(正无穷大),当求最小值的时候,为避免Vl到Vl的距离值O会影响程序运行,所以将矩阵中数值合理的设为Info3、在后续程序制作运行中,发现已选出最小值的列会对之后的数值选择有混淆影响,容易出现死循环,即:出现过V4后,接下来还会出现。所以将已选出最小值所对应的列统一设置为Inf。4、尝试for语句循环简化程序时,发现for循环不是按照特定步长循环的,是找到第一行、第二行等的最小值,一行一行找到的。而纸上解题时,是找到最小值然后忽略此列,跳转到对应的行。这样显然是不符合解决问题的逻辑,所以尝试While语句简化程序。5、尝试while语句循环简化程序时,发现运行会出现死循环的结果,命令行窗口停不下来,由此发现需要给WhiIe一个走出循环的限制条件。6、在Whiie进入死循环时,利用if跳出死循环。SUm语句表示上一过程的数值和加上此过程找到的最小值,重新赋值给SUm,直到循环结束,SUm值不再发生变化。输出结果,循环结束。7、将代码保存在.m的文件里,这样下次使用时就可直接在文件夹里打开,而不必每次都去敲命令。综上所述,当我们编写程序时.,需要有充足的耐心并且掌握MATLAB基础的语言,小组成员之间应各抒己见,表达自己的想法,配合组长安排,共同完成实验任务。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号