实验三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_xmax_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