您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 实验三MATLAB程序设计
共16页,第27页272014秋2012级《MATLAB程序设计》实验报告班级:软件C121姓名:冯杨腾学号:125692实验三MATLAB程序设计一、实验目的1、掌握建立和执行M文件的方法。2、掌握选择结构、多分支选择结构程序的编程方法。3、掌握多种循环结构程序的编程方法。4、掌握定义函数文件和调用函数文件的方法。二、实验内容1、MATLABM文件的创建与使用。(1)建立自己工作目录,如D:\MATLAB。在File菜单中,单击SetPath菜单项,在弹出对话框中建立目标文件夹,:单击AddFolder按钮,将自己的工作目录D:\MATLAB添加到搜索目录之中,按Save按钮保存,如图1。图1工作目录设置(2)在M文件编辑器中编制命令行文件。在File菜单中,单击New—M-File,弹出M文件编辑器,如图2:共16页,第28页28图2编辑器在编辑器中输入如下命令程序:%求小于2000且为2的整数次幂的正整数。f(1)=2;k=1;whilef(k)1000f(k+1)=f(k)*2;k=k+1;endf,k调试后,将其以test1.m形式保存在D:\MATLAB中。(3)命令行程序运行。进入命令窗口,键入test1,观察运行结果:f=Columns1through9248163264128256512Column101024k=10(4)按上述步骤,在在编辑器中输入如下函数文件:共16页,第29页29functionf=tt(n)%求小于任何正整数且为2的整数次幂的正整数。%c=n(n)%n可取任意正整数。%2004年8月。f(1)=2;k=1;whilef(k)ceil(n/2)%ceil函数取最近的正整数f(k+1)=f(k)*2;k=k+1;endf调试后,将其以test2.m形式保存在D:\MATLAB中。(5)进入命令窗口,键入test2(9),观察程序运行结果。test2(9)f=248ans=2482、编写一个函数M文件,计算下面函数的值,给出标量x的值,调用该函数后,返回y的值。sin,0(),036,3xxyxxxxx选择一些数据测试编写的函数。源程序:共16页,第30页30function[y]=myfun(x)ifx=0y=sin(x);elseifx3y=-x+6;elsey=x;end运行结果:test(0)ans=0test(2)ans=2test(5)ans=13、编写一个函数M文件,返回向量x中元素的和、平均值、最大值、最小值、均方根值。其中方均根值(RootMeanSquare)的计算公式为:211NiirmsxN并用下面数据测试你写的函数:(1)x=sin(0:0.01:6*pi)(2)x=rand(1,200),得到的x为200个(0,1)之间均匀分布的随机数。源程序:function[sum_x,m_x,max_x,min_x,rsm_x]=myfun7(x)sum_x=0;a=x;fork=a;sum_x=sum_x+k;n=length(x);共16页,第31页31fori=1:nm_x=sum_x/n;endendmin_x=x(1);fort=1:nifmin_xx(t)min_x=x(t);endendmax_x=x(1);fort=1:nifmax_xx(t)max_x=x(t);endendsum_x1=0;fort=1:nsum_x1=sum_x1+x(t).^2;rms_x=sqrt(sum_x1/n);endsum_xm_xmax_xmin_xrms_x运行结果:(1)x=sin(0:0.01:6*pi);myfun7(x)sum_x=-2.1218e-004m_x=-1.1256e-007max_x=1.0000min_x=-1.0000rms_x=0.70712)x=rand(1,200);myfun7(x)共16页,第32页32sum_x=99.5448m_x=0.4977max_x=0.9961min_x=0.0046rms_x=0.57784、编写一个函数M文件,若给出一个向量12[,,]nxxxx,函数返回如下范德蒙矩阵。122221211112111nnnnnnxxxxxxxxx例如在命令窗口输入v=myvander([2345]),得1111234549162582764125v,同时生成一些数据测函数。源程序:function[v]=myvander(x)n=length(x);v=ones(n,n);forj=1:nfori=1:nv(i,j)=x(j)^(i-1);endend运行结果:x=([2345]);test(x)ans=共16页,第33页331111234549162582764125x=([123]);test(x)ans=1111231495、分别使用while和for编写命令文件,用循环语句编程计算s值:10322()nsnn同时对编写的文件设置断点,观察变量取值的变化情况。(1)For循环:function[]=test()s=0;forn=2:1:10s=s+(n^3-n^2);enddisp(s)end运行结果:test()2640(2)While循环:function[]=test()s=0;n=2;whilen=10s=s+(n^3-n^2);n=n+1;enddisp(s)end共16页,第34页34运行结果:test()26406、数论中一个有趣的题目:任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。重复此过程,最终得到的结果为1。如:21310516842163105168421建立命令M文件,完成上述功能,要求显示数字处理过程。源程序:functionX=test()n=input('请输入一个正整数');X(1)=n;i=2;whilen~=1ifrem(n,2)==0n=n/2;elseifrem(n,2)==1n=n*3+1;endX(i)=n;i=i+1;endend运行结果:请输入一个正整数2ans=21请输入一个正整数3ans=3105168421请输入一个正整数12共16页,第35页35ans=12631051684217、设计一个学生身高的管理系统,输出身高的基本分为5等:很高、较高、中等、较矮、矮,其中190cm以上为“很高”,[180cm,190cm)区间为“较高”,[170cm,180cm)为“中等”,[1160cm,170cm)为“较矮”,160cm以下为“矮”,要求分别用if语句和switch语句实现(1)for语句:n=100;fori=1:na=input('请输入身高');ifa1.90disp('很高')elseifa=1.80&&a1.90disp('较高')elseifa=1.70&&a1.80disp('中等')elseifa=1.60&&a1.70disp('较矮')elseifa1.60disp('矮')endend运行结果:请输入身高1.95很高请输入身高1.85较高请输入身高1.75中等请输入身高1.65较矮请输入身高1.55矮switch语句:x=input('身高为:');共16页,第36页36n=(x-100)/10;switchfloor(n)case{10,9}disp('很高');case{8}disp('较高');case{7}disp('中等');case{6}disp('较矮');case{5,4,3,2,1,0}disp('矮')end运行结果:身高为:195很高身高为:185较高身高为:175中等身高为:165较矮身高为:155矮8、Fibonacci数组的元素满足Fibonacci规则:ak+2=ak+ak+1,(k=1,2,3,…);且a1=a2=1。请设计一段程序,求出该数组中第一个大于10000的元素要求显示的结果为:i=21a(i)=10946或者a(21)=10946源程序:a(1)=1;共16页,第37页37a(2)=1;i=2;whilea(i)=10000a(i+1)=a(i-1)+a(i);i=i+1;end;i,a(i)运行结果:i=21ans=10946源程序:n=100;a(1)=1;a(2)=1fori=3:na(i)=a(i-1)+a(i-2);ifa(i)=10000a(i),break;end;end;i运行结果:a=Columns1through121123581321345589144Columns13through21233377610987159725844181676510946ans=10946i=219、编写一个函数文件and.m,用于求两个输入矩阵的乘积和点乘,然后在命令行窗口中调用该函数,要求:共16页,第38页38(1)当两矩阵是尺寸相同的方阵时,返回它们的乘积和点乘。(2)当两矩阵不是尺寸相同的方阵时,则根据它们的尺寸,分别进行乘积或点乘(3)当两矩阵的尺寸不能满足乘积或点乘的要求时,则提示“这两个矩阵不能乘”源程序:function[]=test(x,y)[m,n]=size(x);[i,j]=size(y);ifm==n&&i==j&&m==iz1=x*y;z2=x.*y;disp(z1);disp(z2);elseifn==iz1=x*y;disp(z1);elseifm==i&&n==jz2=x.*y;disp(z2);elseifn~=idisp('这两个矩阵不能相乘');endend运行结果:1)x=[123;456;789];y=[123;456;789];test(x,y)303642668196102126150149共16页,第39页391625364964812)y=[123;456];x=[123;456];test(x,y)1491625363)x=[122;233;344];y=[123;456];test(x,y)这两个矩阵不能相乘10、编写一个阶乘函数factorial.m,然后在如下程序中调用该函数,“分别使用for和while语句找出最小的n值,使得n!10100,并求出n!”(1)For语句:Function[]=factorial()n=1;s=1;forn=1:10000s=s*n;if(s10100)break;enddisp(n);end运行结果:12共16页,第40页4034567(2)While语句:function[]=factorial()n=1;s=1;whiles=10100n=n+1;s=s*n;enddisp(n);end运行结果:factorial()811、下列程序用来判断一个人的体温是否处于危险状态。调试程序是否正确,如果程序错误指出错误在哪里?并写出正确答案。temp=input(‘请输入体温:temp=’);iftemp36.5disp(‘体温偏低’);elseiftemp36.5disp(‘体温正常’);elseiftemp38.0disp(‘偏高!’;elseiftemp39共16页,第41页41disp(‘温高!!’)end错误:没有范围源程序:temp=input('请输入体温:temp=');iftemp36.5disp('体温偏低');elseiftemp=36.5&&temp=38disp('体温正常');elseiftemp38.0&&temp=39disp('偏高!');elseiftemp39disp('温高!!')end运行结果:请输入体温:temp=35体温偏低请输入体温:temp=37体温正常请输入体温:temp=38.5偏高!请输入体温:temp=40温高!!1
本文标题:实验三MATLAB程序设计
链接地址:https://www.777doc.com/doc-2458113 .html