实验三MATLAB程序设计.docx
- 文档编号:28320453
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:20
- 大小:95.39KB
实验三MATLAB程序设计.docx
《实验三MATLAB程序设计.docx》由会员分享,可在线阅读,更多相关《实验三MATLAB程序设计.docx(20页珍藏版)》请在冰豆网上搜索。
实验三MATLAB程序设计
2014秋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:
图2编辑器
在编辑器中输入如下命令程序:
%求小于2000且为2的整数次幂的正整数。
f
(1)=2;
k=1;
whilef(k)<1000
f(k+1)=f(k)*2;
k=k+1;
end
f,k
调试后,将其以test1.m形式保存在D:
\MATLAB中。
(3)命令行程序运行。
进入命令窗口,键入test1,观察运行结果:
f=
Columns1through9
248163264128256512
Column10
1024
k=
10
(4)按上述步骤,在在编辑器中输入如下函数文件:
functionf=tt(n)
%求小于任何正整数且为2的整数次幂的正整数。
%c=n(n)
%n可取任意正整数。
%2004年8月。
f
(1)=2;
k=1;
whilef(k) f(k+1)=f(k)*2; k=k+1; end f 调试后,将其以test2.m形式保存在D: \MATLAB中。 (5)进入命令窗口,键入test2(9),观察程序运行结果。 >>test2(9) f= 248 ans= 248 2、编写一个函数M文件,计算下面函数的值,给出标量x的值,调用该函数后,返回y的值。 选择一些数据测试编写的函数。 源程序: function[y]=myfun(x) ifx<=0 y=sin(x); elseifx>3 y=-x+6; else y=x; end 运行结果: >>test(0) ans= 0 >>test (2) ans= 2 >>test(5) ans= 1 3、编写一个函数M文件,返回向量x中元素的和、平均值、最大值、最小值、均方根值。 其中方均根值(RootMeanSquare)的计算公式为: 并用下面数据测试你写的函数: (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); fori=1: n m_x=sum_x/n; end end min_x=x (1); fort=1: n ifmin_x>x(t) min_x=x(t); end end max_x=x (1); fort=1: n ifmax_x max_x=x(t); end end sum_x1=0; fort=1: n sum_x1=sum_x1+x(t).^2; rms_x=sqrt(sum_x1/n); end sum_x m_x max_x min_x rms_x 运行结果: (1) >>x=sin(0: 0.01: 6*pi); >>myfun7(x) sum_x= -2.1218e-004 m_x= -1.1256e-007 max_x= 1.0000 min_x= -1.0000 rms_x= 0.7071 2) >>x=rand(1,200); >>myfun7(x) sum_x= 99.5448 m_x= 0.4977 max_x= 0.9961 min_x= 0.0046 rms_x= 0.5778 4、编写一个函数M文件,若给出一个向量 ,函数返回如下范德蒙矩阵。 例如在命令窗口输入>>v=myvander([2345]),得 ,同时生成一些数据测函数。 源程序: function[v]=myvander(x) n=length(x); v=ones(n,n); forj=1: n fori=1: n v(i,j)=x(j)^(i-1); end end 运行结果: x=([2345]); >>test(x) ans= 1111 2345 491625 82764125 >>x=([123]); >>test(x) ans= 111 123 149 5、分别使用while和for编写命令文件,用循环语句编程计算s值: 同时对编写的文件设置断点,观察变量取值的变化情况。 (1)For循环: function[]=test() s=0; forn=2: 1: 10 s=s+(n^3-n^2); end disp(s) end 运行结果: >>test() 2640 (2)While循环: function[]=test() s=0; n=2; whilen<=10 s=s+(n^3-n^2); n=n+1; end disp(s) end 运行结果: >>test() 2640 6、数论中一个有趣的题目: 任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。 重复此过程,最终得到的结果为1。 如: 2→1 3→10→5→16→8→4→2→1 6→3→10→5→16→8→4→2→1 建立命令M文件,完成上述功能,要求显示数字处理过程。 源程序: functionX=test() n=input('请输入一个正整数'); X (1)=n; i=2; whilen~=1 ifrem(n,2)==0 n=n/2; elseifrem(n,2)==1 n=n*3+1; end X(i)=n; i=i+1; end end 运行结果: 请输入一个正整数2 ans= 21 请输入一个正整数3 ans= 3105168421 请输入一个正整数12 ans= 1263105168421 7、设计一个学生身高的管理系统,输出身高的基本分为5等: 很高、较高、中等、较矮、矮,其中190cm以上为“很高”,[180cm,190cm)区间为“较高”,[170cm,180cm)为“中等”,[1160cm,170cm)为“较矮”,160cm以下为“矮”,要求分别用if语句和switch语句实现 (1)for语句: n=100; fori=1: n a=input('请输入身高'); ifa>1.90 disp('很高') elseifa>=1.80&&a<1.90 disp('较高') elseifa>=1.70&&a<1.80 disp('中等') elseifa>=1.60&&a<1.70 disp('较矮') elseifa<1.60 disp('矮') end end 运行结果: 请输入身高1.95 很高 请输入身高1.85 较高 请输入身高1.75 中等 请输入身高1.65 较矮 请输入身高1.55 矮 switch语句: x=input('身高为: '); n=(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=21 a(i)=10946 或者 a(21)=10946 源程序: a (1)=1; a (2)=1; i=2; whilea(i)<=10000 a(i+1)=a(i-1)+a(i); i=i+1; end; i,a(i) 运行结果: i= 21 ans= 10946 源程序: n=100; a (1)=1; a (2)=1 fori=3: n a(i)=a(i-1)+a(i-2); ifa(i)>=10000 a(i), break; end; end; i 运行结果: a= Columns1through12 1123581321345589144 Columns13through21 233377610987159725844181676510946 ans= 10946 i= 21 9、编写一个函数文件and.m,用于求两个输入矩阵的乘积和点乘,然后在命令行窗口中调用该函数,要求: (1)当两矩阵是尺寸相同的方阵时,返回它们的乘积和点乘。 (2)当两矩阵不是尺寸相同的方阵时,则根据它们的尺寸,分别进行乘积或点乘 (3)当两矩阵的尺寸不能满足乘积或点乘的要求时,则提示“这两个矩阵不能乘” 源程序: function[]=test(x,y) [m,n]=size(x); [i,j]=size(y); ifm==n&&i==j&&m==i z1=x*y; z2=x.*y; disp(z1); disp(z2); elseifn==i z1=x*y; disp(z1); elseifm==i&&n==j z2=x.*y; disp(z2); elseifn~=i disp('这两个矩阵不能相乘'); end end 运行结果: 1) >>x=[123;456;789]; >>y=[123;456;789]; >>test(x,y) 303642 668196 102126150 149 162536 496481 2) >>y=[123;456]; >>x=[123;456]; >>test(x,y) 149 162536 3) >>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: 10000 s=s*n; if(s>10100) break; end disp(n); end 运行结果: 1 2 3 4 5 6 7 (2)While语句: function[]=factorial() n=1; s=1; whiles<=10100 n=n+1; s=s*n; end disp(n); end 运行结果: >>factorial() 8 11、下列程序用来判断一个人的体温是否处于危险状态。 调试程序是否正确,如果程序错误指出错误在哪里? 并写出正确答案。 temp=input(‘请输入体温: temp=’); iftemp<36.5 disp(‘体温偏低’); elseiftemp>36.5 disp(‘体温正常’); elseiftemp>38.0 disp(‘偏高! ’; elseiftemp>39 disp(‘温高! ! ’) end 错误: 没有范围 源程序: temp=input('请输入体温: temp='); iftemp<36.5 disp('体温偏低'); elseiftemp>=36.5&&temp<=38 disp('体温正常'); elseiftemp>38.0&&temp<=39 disp('偏高! '); elseiftemp>39 disp('温高! ! ') end 运行结果: 请输入体温: temp=35 体温偏低 请输入体温: temp=37 体温正常 请输入体温: temp=38.5 偏高! 请输入体温: temp=40 温高! ! 12、使用嵌套for循环命令创建下列矩阵: 源程序: function[]=test() a=zeros(5); fori=1: 5 a(i,i)=5; forj=1: 5 ifi==j+1||j==i+1 a(i,j)=1; end end end disp(a); end 运行结果: >>test() 51000 15100 01510 00151 00015
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 MATLAB 程序设计