实验6 Matlab程序设计_第1页
实验6 Matlab程序设计_第2页
实验6 Matlab程序设计_第3页
实验6 Matlab程序设计_第4页
实验6 Matlab程序设计_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验6Matlab程序设计实验目的:掌握脚本式M文件和函数式M文件的编写、调试和运行;2.掌握从分析问题到算法设计再到程序实现的全过程。实验内容:编写求[200,300]之间第一个能被21整除的整数的脚本式M文件,并给出运行的方法和结果。编写用5次多项式拟合函数y=sin(x),xW[0,2n]的脚本式M文件,要求绘图观察拟合的效果。编写求多项式P(x)=anx“+an_严h・・・+a1x+a0的值的函数式M文件(不能调用函数polyval),要求通过实例调试通过。编写计算第n个Fibonnaci数的函数式M文件,并应用它求第15个Fibonnaci数。按“题目分析一程序设计一实现算法的程序一实例应用”的步骤解决下面的问题。• 1(xl.yI,pl)CxUyl>&坐标救援问题:假设洪水把一个村庄淹没了,只有那些比较高的房屋的屋顶露出水面,人们已经爬上屋顶等待求援。如右图,在图的原点是大本营,救生船每次从大本营出发,救了人之后将人送回大本营。图中的点代表屋顶,每个屋顶由其位置坐标和其上的人数表示。救生船每次从大本营出发,以速度50米/分钟驶向下一个屋顶,达到一个屋顶后,救下其上的所有人,每人上船1• 1(xl.yI,pl)CxUyl>&坐标班级:10级应用2班姓名:刘浩 学号:2010051318按“题目分析一程序设计一算法描述一实现算法的程序一实例应用”的步骤解决下面的问题。奖金问题:过年了,村里要庆祝一下。村长对村里的128个村民说:做一个游戏,让每个人把出生年+月+日得到一个数。例如:1968年10月28日=1968+10+28=2006。然后把这个数报上来。村里有一笔钱要作为游戏的奖金,数额为M元。如果有人报上来的数字与M相同,就把这笔钱发给这些人。如果只有一个人得奖,奖金都归这个人。如果有多于一个人得奖,则他们平分这笔钱。请写一个程序算算都有哪些人得到了奖金?得到多少?实验仪器与软件:1.CPU主频在2GHz以上,内存在512Mb以上的PC;2.Matlab2010a及以上版本。实验讲评:实验成绩:评阅教师:2011年月日实验6Matlab程序设计一、 求[200,300]之间第一个能被21整除的整数的脚本式M文件clearforn=200:300ifrem(n,21)~=0continueendbreakendn二、 用5次多项式拟合函数y二sin(x),xW[0,2n]的脚本式M文件clearx=0:pi/20:2*pi;y=sin(x);p=polyfit(x,y,5)x1=0:pi/30:pi*2;y1=sin(x1);y2=polyval(p,x1);三、 求多项式P(x)=ax"+a尹-1+・・・+a1x+a0的值的函数式M文件n n-1 1 0①程序如下functiony=polynomial(n,x)cleary=0;n=input('请依次输入多项式的次数n:')coe=zeros(1,n+1) fori=1:n+1y=0;coe(i)=input('请依次输入多项式的系数:');enddisp('你输入的多项式如下:')poly2sym(coe)x=input('请输入多项式中x的值:')disp('多项式的值为:')fori=1:n+1y=y+coe(i)*x"(n+l-i);end四、 计算第n个Fibonnaci数的函数式M文件clearfunctiony=Fib(n)ifn<3y=1;elsey=Fib(n-1)+Fib(n-2);end五、救援问题的解决+1.题目分析:这个问题的实际上就是一个简单的求和问题。单独计算出每个屋顶上的人到达大本营的时间,然后将他们相加即可。计算公式如下:TOC\o"1-5"\h\z\o"CurrentDocument"N2:X2+y2z 、 、totalTime=£( +(1+0.5)xp)totalTime=\o"CurrentDocument"speed ii=1其中,totalTime是要求的总时间,N是屋顶数(本题中为50),speed是船行驶的速度(本题中为50(米/分钟)),x,y是第i个屋顶的坐标,P.是第i个屋顶上的ii i人数。因为要在计算后输出所有屋顶位置和人数,所以需要保存所有有屋顶和人数信息。2.程序设计⑴定义结构类型的数组一存放屋顶信息。⑵依次读入屋顶及其上的人数信息,并保存起来。⑶计算所需营救时间。⑷输出营救时间和所有屋顶坐标及人数。3.实现算法的程序clearnum=50;speen=50;up=1;down=0.5;totalTime=0;disp('请依次输入屋顶横坐标:')roofx=zeros(1,num);fori=1:numroofx(i)=input('x(i):');enddisp('请依次输入屋顶纵坐标:')roofy=zeros(1,num);fori=1:numroofy(i)=input('y(i):');enddisp('请依次输入屋顶人数:')roofp=zeros(1,num);fori=1:numroofp(i)=input('p(i):');enddisp('第i个屋顶坐标(x,y)和人数p(i)依次为:')fori=1:numfprintf('(%g,%g)\n',roofx(i),roofy(i))fprintf('%g\n',roofp(i))fprintf('\n')endfori=1:numtotalTime=totalTime+2*(sqrt(roofx(i)"2+roofy(i)"2)/speen)+roofp(i)*(up+down);enddisp('总救援时间:')totalTime4.实例应用在上述程序中需要重复输入50个数据才能显示运行结果。太过繁琐。所以我们只计算3个屋顶的。令:num=2; %屋顶数speen=5; %船速(m/min)程序运行后,依次输入6个数:1、2、3、4、5、6程序运行结果如下:clearnum=2;speen=5;up=1;down=0.5;totalTime=0;disp('请依次输入屋顶横坐标:')roofx=zeros(1,num);fori=1:numroofx(i)=input('x(i):');enddisp('请依次输入屋顶纵坐标:')roofy=zeros(1,num);fori=1:numenddisp('请依次输入屋顶人数:')roofp=zeros(1,num);fori=1:numroofp(i)=input('p(i):');enddisp('第i个屋顶坐标(x,y)和人数p(i)依次为:')fori=1:numfprintf('(%g,%g)\n',roofx(i),roofy(i))fprintf('%g\n',roofp(i))fprintf('\n')endfori=1:numtotalTime=totalTime+2*(sqrt(roofx(i)A2+roofy(i)A2)/speen)+roofp(i)*(up+down);enddisp('总救援时间:')totalTime请依次输入屋顶横坐标:x(i):x(i):请依次输入屋顶纵坐标:y(i):y(i):请依次输入屋顶人数:p(i):p(i):第i个屋顶坐标(x,y)和人数p(i)依次为:(1,3)5(2,4)6总救援时间:totalTime=19.5538六、奖金问题的解决1.题目分析:班级:10级应用2班姓名:刘浩 学号:2010051318-6-首先会想到想要把128个村民报的数字读进来,一边读一边判断是否与M相同,如果相同就记下这个村民的编号,并累积获奖村名个数,最后记下来的获奖个数去除M,得到每个人所得的奖金数。可是事先并不知道有多少人会获奖,那么用什么样的变量来存储获奖者编号呢?如果用128个变量来存储每个村民是否获奖就太繁琐了。所以要介绍一种称为数组的数据结构来帮助解决这个问题。2.程序设计可以先把村民的编号,然后用一个称为数组的数据结构来存储所有村民报的赎回自。用另一个数组存储所报数字与M相同的村民的编号。再用一个整数来存储所报数字等于M的村民的人数。3.算法描述⑴定义一个数组存放所有的村民上报的数据。⑵定义一个数组存放获奖者的编号(幸运者数组)。⑶定义一个整数存放获奖者人数。⑷村民顺序上报数字,其相应编号就是存放数据的数组元素下标:0,2,3„。⑸报上数字与幸运数相等,则记录编号到幸运者数组中。获奖者人数加1。⑹打印出获奖者编号和获得的奖金数额。4.实现算法的程序clearlucky_m=2006;population=128;sum_nms=0;n=0;disp('请输入population个村民报的数字:')nms=zeros(1,population);fori=1:populationnms(i)=input('输入数字:');endfori=1:populationsum_nms=sum_nms+nms(i);endfori=1:populationifnms(i)==lucky_mn=n+1;disp('获奖村民是第i个:')iendenddisp('共有n个村民获奖:')ndisp('获奖村民获得的奖金数:')ave=sum_nms/n5.实例应用在上述程序中需要重复输入128个数据才能显示运行结果。太过繁琐。所以我们只计算10个村民的。令:lucky_m=5; %幸运数字population=10; %村民人数程序运行后,依次在主窗口中输以下10个数:1、2、5、6、7、5、8、9、6、5程序运行结果如下:%奖金问题。%幸运数字%幸运数字%村民人数lucky_m=5;population=10;sum_nms=0;n=0;disp('请输入population个村民报的数字:')nms=zeros(1,population);fori=1:populationnms(i)=input('输入数字:');endfori=1:populationsum_nms=sum_nms+nms(i);endfori=1:population%统计获奖%统计获奖村民人数%输出是第几个村民获奖学号:2010051318disp('获奖村民是第i个:')iendenddisp('共有n个村民获奖:')班级:10级应用2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论