第三章 MATLAB程序设计入门
3.1 M文件
用MATLAB语言编写的程序,称为M文件。M文件有两类:命令文件和函数文件。两者区别在于:命令文件没有输入参数,也不返回输出参数;而函数文件可以输入参数,也可返回输出参数。命令文件对MATLAB工作空间中的变量进行操作,而函数文件中定义的变量为局部变量,当函数文件执行完毕时,这些变量被清除。
3.1.1 M文件建立与编辑
M文件可以用任何编辑程序建立和编辑,而最常用且最为方便的是使用MATLAB提供的M文件窗口。
1. 建立新的M文件
从MATLAB命令窗口的File菜单中选择New菜单项,再选择M-file命令,将得到M文件窗口。在M文件窗口中输入M文件的内容,输入完毕后,选择此窗口File菜单的Save as命令,将会得到Save as对话框。在对话框的File框中输入文件名(注意,其扩展名必须为.M),再选择OK按钮即完成新的M文件的建立。 2. 编辑已有的M文件
从MATLAB命令窗口的File菜单中选择Open M-file命令,则屏幕出现Open对话框,在Open对话框中的File Name框中输入文件名(必要时加上路径),或从右边的Directories框中打开这个M文件所在的目录,再从File Name下面的列表框中选中这个文件,然后按OK按钮即可打开这个M文件。在M文件窗口可以对打开的M文件进行编辑修改。在编辑完成后,选择File菜单中的Save命令可以把这个编辑过的M文件保存下来。
3. 搜索与执行M文件
M文件中的命令是通过在MATLAB命令窗口中键入M文件的文件名并按下回车键来执行的。
当用户在命令窗口中键入M文件的文件名并按下回车后,系统先搜索该文件,若该文件存在,则以解释方式顺序逐条执行M文件的语句。
例如,若用户在命令窗口中输入文件名example并按回车键,则系统搜索该文件的过程如下:
(1)在工作空间中寻找变量example,检查example是否为变量。 (2)检查example是否为MATLAB的内部函数。 (3)在当前目录中搜索文件example.m。
(4)在MATLAB的默认搜索路径中查找文件example.m。
19
“work”目录是系统M文件的默认保存目录。若用户的M文件保存在“work”目录以外的其它位置,则可以通过如下两种方式在MATLAB命令窗口中直接调用该M文件。
方式一:启动MATLAB后,用“CD”命令将当前工作目录更改为M文件的保存目录如:
cd A:\\mydata
方式二:用“path”命令将M文件的保存目录添加到MATLAB的默认搜索路径中。设待执行的M文件的保存位置为“D:\\myfile”,则添加搜索路径的命令为:
path(path,’D:\\myfile’)
运行该命令后,即可直接在MATLAB命令窗口中直接调用并执行D:\\myfile 目录下的所有M文件。
3.1.2 命令文件
当用户运行的命令较多或需要反复运行多条命令时,直接从键盘逐行输入命令显得比较麻烦,而命令文件则可以比较好地解决这一问题。我们可以将需要运行的命令编辑到一个命令文件中,然后在MATLAB命令窗口输入该命令文件的名字,就会顺序执行命令文件中的命令。
例:建立一个命令文件将变量a、b的值互换,然后运行该命令文件。 解 (1)首先建立命令文件并以文件名e31.m存盘: a=1:9;
b=[11,12,13;14,15,16;17,18,19]; c=a;a=b;b=c; a b
(2) 在MATLAB的命令窗口中输入e31,将会执行该命令文件,输出为: a=
11 12 13 14 15 16 17 18 19
b=
1 2 3 4 5 6 7 8 9
调用该命令文件时,不用输入参数,也没有输出参数,文件自身建立需要的变量。当文件执行完毕时,可以用命令whos查看工作空间中的变量。这时会发现a,b,c等变量仍然保留在工作空间中。 3.1.3 函数文件
函数文件是M文件的另一种类型,函数文件必须以关键字“function”开头。
20
函数文件的第一行为函数说明语句,其格式为:
function [返回参数1,返回参数2,?]=函数名(传入参数1,传入参数2?) 其中函数名为用户自己定义的函数名(与变量命名规则相同)。
函数文件保存的文件名应与用户定义的函数名一致,例如,若函数文件说明语句中定义的函数名为“example”,则该函数文件保存的文件名应为“example.m”。
用户可通过函数说明语句中的返回参数及传入参数来实现函数参数传递。返回参数和传入参数并不是必须的。下面是函数文件调用及参数传递的例子。
首先创建函数文件并保存。
function [m,s]=mean(a) %定义函数文件mean.m,a为传入参数,m、s为返回
%参数
l=length(a); %计算传入向量长度
s=sum(a); %对传入向量a求和并赋值给返回向量s
m=s/l; %计算传入向量的平均值并赋值给返回向量m
上述函数文件定义了一个新的函数mean其作用是对指定向量求和及均值,并通过向量s、m返回计算结果。用户通过如下所示的命令调用该函数。
a=1:9;
[m,s]=mean(a) m= 5 s= 45
3.2 数据的输入输出
MATLAB的输入输出方式包括命令窗口的输入输出及图形界面的输入输出。此外,它还允许对文件进行读写。这里先介绍命令窗口的输入输出。
1. input函数
MATLAB提供了一些输入输出函数,允许用户和计算机之间进行数据交换。如果用户想给计算机输入一个参数,则可以使用input函数来进行,该函数的调用格式为:
A=input(提示信息,选项);
其中提示信息可以是一个字符串,它用来提示用户输入什么样的数据。例如,用户想输入矩阵A,则可以采用下面的命令来完成:
A=input(‘Enter matrix A=>’);
执行该语句时首先给出Enter matrix A=>提示,然后等待用户从键盘按MATLAB格式输入A矩阵。如果在input函数调用时采用’s’选项,则允许用户输入一个字符串。例如想输入一个人的姓名,可采用命令: xm=input(‘What’’s your mane:’,’s’)
21
例:求一元二次方程ax2+bx+c=0的根。 解 程序如下: a=input(‘a=?’); b=input(‘b=?’); c=input(‘c=?’); d=b*b-4*a*c;
x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)] 运行 a=?2 b=?6 c=?1 x=
-0.1771 -2.8229
2. pause 函数
当程序运行时,为了查看程序的中间结果或者观看输出图形,有时需要暂停程序的执行。这时可以使用pause函数,其调用格式为:
pause(延迟秒数)
若省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。
3. disp 函数
MATLAB提供的命令窗口输出函数主要有disp函数,其调用格式为: disp(输出项)
其中输出项既可以是字符串,也可以是矩阵。例如 A=’Hello, MATLAB’; disp(A) 输出为:
Hello, MATLAB 又如:
A=[1,2,3;4,5,6;7,8,9]; disp(A) 输出为:
1 2 3 4 5 6 7 8 9
注意,和前面介绍的矩阵显示方式不同,用disp函数显示矩阵时不显示矩阵的名字,而且其格式更紧密,且不留任何没有意义的空行。
22
3.3 全局变量和局部变量
用户在命令文件和函数文件中经常要用到变量,但命令文件和函数文件中的变量存在较大的区别。函数内部所定义的变量均为局部变量,它们与其它函数变量是相互隔离的,即变量只在函数内部起作用。而命令文件中变量是全局变量,工作空间的所有命令和函数都可以直接访问这些变量。
当用户需要在多个函数中使用相同的变量时,就要将这些变量定义为全局变量。全局变量用命令global定义。例如,语句:
global BEG END
就定义了两个全局变量BEG和END。为了不与普通变量相混淆,全局变量通常用大写字母表示。下面是函数中如何使用全局变量的例子,首先创建函数文件mean1.m。
function s=mean1 %定义函数mean1.m
global BEG END %说明全局变量BEG和END
k=BEG:END; %由全局变量BEG和END创建向量k s=sum(k) %对向量元素值求和并赋值给返回向量s
该函数是一个只有一个返回参数且无传入参数的函数。用户可以通过创建如下所示的命令文件(主程序)来调用该函数。
global BEG END %定义BEG和END为全局变量 BEG=1; END=10;
s1=mean1 %调用函数mean1 BEG=1; END=20;
s2=mean1 %调用函数mean1 s1= 55 s2=
210
可见,使用全局变量也可以实现函数参数传递的作用,但这样却破坏了函数的封装性,建议尽量避免使用。
3.4 程序流程控制
3.4.1 条件控制语句 1. if语句
在MATLAB中,if 语句有3种格式: 格式1: if 条件
23