实验三 M 文件及 MATLAB 程序设计与调试
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三M 文件及MATLAB 程序设计与调试
一、实验目的
全面掌握在MA TLAB 下进行程序设计的有关问题,具体涉及到M 脚本文件和M 函数文件的编写、全局和局部变量的使用、流程控制结构、提高程序执行效率的设计技术、程序调试等问题。
二、实验内容
1、关于M 脚本文件和M 函数文件
MATLAB 的M 文件有两类:脚本文件和函数文件。
(1)脚本文件——将原本要在MATLAB 的指令窗口中直接输入的语句,放在一个以.m 为后缀的,称为脚本文件中。有了脚本文件,可直接在MATLAB 中输入脚本文件名(不含后缀)。MATLAB 会打开这一脚本文件,并依次执行脚本文件中的每一条语句,这与在MATLAB 中直接输入语句的结果完全一致。
(2)函数文件——它的第一行必须是函数定义行。
M 函数文件由5 部分构成:
◆函数定义行
◆H1 行
◆函数帮助文本
◆函数体
◆注释
注意:在函数文件中,除了函数定义行之外,其它部分都是可以省略的。但作为一个函数,为了提高函数的可用性,应加上H1 行和函数帮助文本,为了提高函数的可读性,应加上适当的注释。
例如:
function y = mean(x)
% MEAN Average or mean value.
% For vectors, MEAN(X) is the mean value of the elements in X.
% For matrices, MEAN(X) is a row vector containing the mean value of each column.
[m,n]=size(x);
if m==1
% Determine whether x is a vector
m=n;
end
y = sum(x)/m;
①函数定义行:function y = mean(x)
function 为函数定义的关键字,mean 为函数名,y 为输出变量,x 为输入变量。当函数具有多个输出变量时,则以方括号括起;当函数具有多个输入变量时,则直接用圆括号括起。
例如:function [x,y,z]=sphere(theta, phi, rho)。
当函数不含输出变量时,则直接略去输出部分或采用空方括号表示,
例如:function printresults(x) 或function [ ]=printresults(x)
所有在函数中使用和生成的变量都为局部变量(除非利用global 语句定义),这些变量值只能通过输入和输出变量进行传递。因此,在调用函数时应通过输入变量将参数传递给函数;函数调用返回时也应通过输出变量将运算结果传递给函数调用者;其它在函数中产生的变量在返回时被全部清除。
②H1 行:描述了函数的“功能”信息(很重要!)
函数文件中第二行一般是注释行,这一行称为H1 行,实际上它是帮助文本中的第一行。H1 行不仅可以由help funtion-name 命令显示,而且,lookfor 命令只在H1 行内搜索,
③函数帮助文本:用来比较详细地说明这一函数的用法
以%开头,输入时help funtion-name 命令,可显示出H1 行和函数帮助文本。
④函数体:完成指定功能的语句实体
可采用任何可用的MATLAB 命令,包括MA TLAB 提供的函数和用户自己设计的M 函数。
⑤注释
●备注:
⏹函数定义名和保存文件名必须一致。两者不一致时,MATLAB 将忽视文件首行的
函数定义名,而以保存文件名为准;
⏹函数文件的名字必须以字母开头,后面可以是字母、下划线以及数字的任意组合,
但不得超过63 个字符;
⏹建议在编写H1 行时,采用英文表达。这样处理是为了以后关键词检索方便。(3)脚本文件和函数文件比较
成了基本工作空间中的变量,这会带来几个问题:
●基本工作空间中与脚本文件中同名的变量会引起冲突
●使基本工作空间中变量数急剧增加,造成内存紧张
●编程时要细心考虑各个脚本文件所用到的变量
这些问题在函数文件中不复存在,MATLAB 通过实参与形参一一对应的方式来实现函数的调用,这极大地方便了程序设计。
举例:分别编写出求取平均值与标准差的脚本文件stat1.m 和函数文件stat 2.m。
stat1.m %脚本文件
%求阵列x 的平均值和标准差
[m,n]=size(x);
if m==1
m=n;
end
s1=sum(x);
s2=sum(x.^2);
mean1=s1/m;
stdev=sqrt(s2/m-mean1 ^2);
stat2.m %函数文件
function [mean1,stdev]=stat2(x)
%STA T2函数文件
%求阵列x 的平均值和标准差
[m,n]=size(x);
if m==1
m=n;
end
s1=sum(x);
s2=sum(x.^2);
mean1=s1/m;
stdev=sqrt(s2/m-mean1 ^2);
在命令窗口依次输入如下命令:
clear
x=rand(4,4)+2;
stat1 %执行stat1.m 后,观察基本空间中的变量情况。
whos %可见:脚本文件所产生的所有变量都返回了工作空间
Name Size Bytes Class
m 1x1 8 double array
mean1 1x4 32 double array
n 1x1 8 double array
s1 1x4 32 double array
s2 1x4 32 double array
stdev 1x4 32 double array
x 4x4 128 double array
Grand total is 34 elements using 272 bytes
disp([mean1;stdev]) %观察计算结果
2.7891 2.3084 2.2860 2.3083
0.2192 0.3196 0.1852 0.2699
在命令窗口顺序输入如下命令:
clear m n s1 s2 mean1 stdev
[m1,std1]=stat2(x); %执行stat2.m 后,观察基本基本空间中的变量情况whos %只增加了由函数返回的结果
Name Size Bytes Class
m1 1x4 32 double array