实验三MATLAB程序设计
一、实验目的
掌握 MATLAB 程序设计的主要方法,熟练编写 MATLAB 函数。
二、实验内容
1. M 文件的编辑。
2.程序流程控制结构。
3.子函数调用和参数传递。
4.局部变量和全局变量。
三、实验步骤
1. M 文件的编辑
选择 MATLAB 的菜单 File→New→M-file,打开新的 M 文件进行辑,然后输入以下内容,并保存文件名为 exp1.m 。
% M脚本文件
%功能:计算自然数列1~100的数列和
s=0;
for n=1:100
s=s+n;
end
s
保存好文件后,在命令窗口输入 exp1 即可运行该脚本文件,注意观察变量空间。接着创建 M 函数文件,然后输入以下内容,并保存文件名为 exp2.m 。
%这是M函数文件
%功能:计算自然数列1~x的数列和
function s=exp2(x)
s=0;
for n=1:x
s=s+n;
end
保存好文件后,在命令窗口输入
>>clear
>>s=exp2(100)
得出结果如下:
>> exp2(200)
ans =
20100
open %命令可以打开M文件进行修改
如:>>open conv %打开conv函数
2. 程序流程控制结构
1) for循环结构
for n=1:10
n
end
另一种形式的 for循环:
n=10:-1:5
for i=n %循环的次数为向量n的列数
i
end
2) while 循环结构
在命令窗口输入:
>>clear,clc;
x=1;
while 1
x=x*2
end
MATLAB 进入死循环,因为 while 判断的值恒为真,须按下 Ctrl+C 键来中断运行,并且可看到 x 的值为无穷大。
3) if-else-end 分支结构
if-else-end分支有如下3种形式
(a) if 表达式
语句组1
end
(b) if 表达式
语句组1
else
语句组2
end
(c) if 表达式 A
语句组1
elseif 表达式B
语句组2
elseif
语句组3
……
else
语句组n
end
4) switch-case 结构
创建 M 脚本文件 exp3.m,输入以下内容并在命令窗口中运行。
%功能:判断键盘输入的数是奇数还是偶数
n=input('n=');
if isempty(n)
error('please input n')
end
switch mod(n,2)
case 1
A='奇数'
case 0
A='偶数'
end
3. 子函数和参数传递 :
function g=exp4(x) %主函数
g=0;
for n=1:x
g=g+fact(n); %调用子函数
end
function y=fact(k) %子函数
y=1;
for i=1:k
y=y*i;
end
输入参数可以由函数 nargin 计算,下面的例子 hanshu( ),当只输入一个参数 x 时,hanshu( )函数会给 y 赋予默认值 0。输出参数可以由nargout计算。
function [sum,n]=hanshu (x,y)
%函数参数个数可变,计算x与y的和
if nargin==1
n =1;
sum = x; %输入一个参数就计算与0的值
elseif nargin==0
n=0;
sum=0; %无输入参数就输出0
else
n=2;
sum=x+y; %输入的是两个数就计算和
end
if nargout ==0
sum=0;
end
4. 局部变量和全局变量
自程序执行开始到退出 MATLAB,始终存放在工作空间,可被任何命令文件和数据文件存取或修改的变量即是全局变量,全局变量可用于函数之间传递参数,全局变量用关键字 global 声明。
编写一个求和的函数文件,其名为 summ.m。程序如下:
function s=summ
global BEG END
k=BEG:END;
s=sum(k);
再编写调用 M 脚本文件use.m来调用 summ.m 函数文件,它们之间通过全局变量传递参数。
程序如下:
global BEG END
BEG=1;
END=10;
s1=summ;
BEG=1;
END=20;
s2=summ;
四、实验练习结果:
1、已知
分别用while循环、for循环和向量求和三种方式编写程序,以求出y的值。
While循环:
function s=abcx(x) %主函数
s=0;
n=1;
while n<51
s=s+rel(n); %调用子函数
n=n+1;
end
function y=rel(n) %子函数
y=0;
y=n/(2*n*n-n+1);
end
得:
ans =
2.3658
for循环:
function s=abcx(x) %主函数
s=0;
for n=1:50
s=s+rel(n); %调用子函数
n=n+1;
end
function y=rel(n) %子函数
y=0;
y=n/(2*n*n-n+1);
end
得:
ans =
2.3658
向量法:
x=[0:50];
X=diag(x);
s=X./(2.*(X.^2)-X+1);
sum=trace(s) %求方阵的迹即对角线之和
disp(sum)
得:
Sum= 2.3658
2、设计一个学生身高的管理系统,输出身高的级别分别为5个等:很高、较高、中等、较矮、矮,其中190cm以上的为“很高”,[180cm,190cm]区间为“较高”,[170cm,180cm]为“中等”,[160cm,170cm]为“较矮”,160cm以下为“矮”。要求分别用if语句和switch语句实现。
if语句:
x=input('身高为:')
if x>190
disp('很高');
elseif x<=190&&x>180
disp('较高');
elseif x<=180&&x>170
disp('中等');
elseif x<=170&&x>160
disp('较矮');
else disp('矮');
End
Switch语句:
x=input('身高为:');
if x>190
n=1;
elseif x<=190&&x>180
n=2;
elseif x<=180&&x>170
n=3;
elseif x<=170&&x>160
n=4;
else n=5;
end
switch n
case 1
disp('很高');
case 2
disp('较高');
case 3
disp('中等');
case 4
disp('较矮');
case 5
disp('矮');
end
五、思考分析
通过这次实验课,我基本掌握了函数的命名、编写和调用,以及if和switch两种循环结构。需注意函数的命名要放在最开始处,且end后面不能再声明函数,调用函数的保存名称最好和函数名称相同。对matlab的学习应该做到理论学习和实验学习并重,只有通过自己动手编写,才能做到真正掌握。
第二篇:Matlab上机实验报告书模板第三次
Matlab上机实验报告(3)
实验条件:1、计算机 2、MATLAB6.5软件环境
院系:物电学院 学号: 2011112010239 班级:1102 姓名:周晓锋
要求:表格中的字体小四号仿宋体,单倍行距,尽量美观。