实验三 M 文件及 MATLAB 程序设计与调试

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档