第 3 章 MATLAB 的程序设计基础
MATLAB 语言体系是 MATLAB 的重要组成部分之一,MATLAB 为用户提供了具有条件控制、函数调用、数据输入输出及面向对象等特性的高层的、完备的编程语言。MATLAB 语言语法简单,程序调试和维护容易,其编程效率远远高于 BASIC、PASCAL 及 C 等高级语言。 MATLAB 的工作方式有两种,一种是交互式的指令行操作方式,即用户在命令窗口中按MATLAB 的语法规则输入命令行并按回车键后,系统将执行该命令并即时给出运算结果。该方式已经在前面一章中做了介绍,它简便易行,非常适合于对简单问题的数学演算、结果分析及测试。但是当要解决的问题变得复杂后,用户将要求系统一次执行多条 MATLAB 语句,显然逐条指令行的交互式人机方式就不再适应大型或复杂问题的解决,这时就要用 MATLAB 的第二条工作方式,即 M 文件的编程工作方式。
M 文件的编程工作方式就是用户通过在命令窗口中调用 M 文件,从而实现一次执行多条MATLAB 语句的方式。M 文件是由 MATLAB 语句(命令行)构成的 ASCII 码文本文件,即 M 文件中的语句应符合 MATLAB 的语法规则,且文件名必须以 .m 为扩展名。用户可以用任何文本编辑器来对 M 文件进行编辑。
M 文件的作用是:当用户在命令窗口中键入已编辑并保存的 M 文件的文件名并按下回车键后,系统将搜索该文件,从而实现用户要求的特定功能。
M 文件又分为命令 M 文件(简称命令文件或脚本文件)和函数 M 文件(简称函数文件)两大类。
3.1 M 文件编辑器
MATLAB 为用户提供了专用的 M 文件编辑器,用来帮助用户完成 M 文件的创建、保存及编辑等工作。
利用 M 文件编辑器创建新 M 文件有如下两种方法: 1.单击 MATLAB 命令窗口工具栏上的“
”图标;
2.单击 MATLAB 命令窗口菜单栏的“File ? New ? M-File”命令。
若需要对已保存过的 M 文件进行修改和编辑,则可单击 MATLAB 命令窗口工具栏上的“
”图标或单击 MATLAB 命令窗口菜单栏的“File ? Open”命令,系统即启动 M 文件
编辑器并打开用户指定的 M 文件。
在 M 文件编辑器中,用户可以用创建一般文本文件的方法对 M 文件进行输入和编辑。M 文件编辑器窗口会以不同的颜色显示注释、关键词、字符串和一般程序代码;可以方便地打
46
开和保存 M 文件并进行编辑,编辑功能有大多数编辑器都有的复制、粘贴、剪切等;在 M 文件编辑器中还可以通过 “Debug”下拉菜单进行程序的调试;程序调试后的试运行有两种方式:一是通过编辑器菜单栏的“Debug ? Run”命令,二是单击编辑器工具栏上的“图标,程序运行的结果及存在的问题都显示在 MATLAB 的命令窗口中。
M 文件中的命令是通过在 MATLAB 命令窗口中键入 M 文件的文件名并按下回车键来执行的。当用户在命令窗口中键入 M 文件的文件名并按下回车键后,系统先搜索该文件,若该文件存在,则以解释方式按顺序逐条执行 M 文件的语句。此时,应注意所要执行的文件是否存放在当前的工作目录下,如果不是,就要先改变当前的工作目录,然后再键入所要执行的 M 文件的文件名。
”
3.2 命令文件(脚本文件或程序文件)
命令文件又称脚本文件或程序文件,是 M 文件的类型之一,即是由 MATLAB 的语句构成的 ASCII 码文本文件,扩展名为 .m。运行命令文件的效果等价于从 MATLAB 命令窗口中顺序逐条输入并运行文件里的指令。在程序设计中,命令文件常作为主程序来设计。命令文件的特点如下:
1.命令文件中的命令格式和前后位置与在命令窗口中输入的没有任何区别。 2.MATLAB 在运行命令文件时,只是简单地按顺序从文件中读取一条条命令,送到 MATLAB命令窗口中去执行。
3.命令文件可以访问 MATLAB 当前工作空间中的所有变量和数据。
4.命令文件运行过程中创建或定义的所有变量都被保留在工作空间中,工作空间中其他命令文件和函数可以共享这些变量。用户可以在命令窗口访问这些变量,并用“who”和“whos”命令对其进行查询,也可用“clear”命令清除。所以,要注意避免变量的覆盖而造成程序出错。
5.命令文件一般用 clear、close all 等语句开始,清除掉工作空间中原有的变量和图形,以避免其他已执行的程序残留数据对本程序的影响。
下面的程序为命令文件的例子。
% MATLAB程序 example3_2_1.m,求 30°角的三角函数值 clear % 清变量 a=30*pi/180; sin30=sin(a) cos30=cos(a) tan30=tan(a) cot30=1/tan(a)
将此程序保存后,在命令窗口中执行该程序,过程如下:
% 把角度变为弧度
% 计算 30°的正弦值赋给变量 sin30,并显示出来,以下类同
47
>> example3_2_1 sin30= 0.5000 cos30= 0.8660 tan30= 0.5774 cot30= 1.7321
在运行该程序时一定要注意文件所在的目录与当前目录是否一致,否则系统会搜索不到该程序文件而无法执行。 3.3 函数文件
函数文件是 M 文件的另一种类型,它也是由 MATLAB 语句构成的 ASCII 码文本文件,扩展名为 .m 。用户可用前述的 M 文件的创建、保存及编辑的方法来进行函数文件的创建、保存与编辑,但特别需要注意以下几点:
1.函数文件必须以关键字“function”开头。
2.函数文件的第一行为函数说明语句,其格式为:
?
function [输出变量列表] = 函数名(输入变量列表)
其中函数名为用户自己定义的函数名(与变量的命名规则相同)。
3.函数文件在运行过程中产生的变量都存放在函数本身的工作空间,当文件执行完最后一条命令或遇到“return”命令时,就结束函数文件的运行,同时函数工作空间的变量被清除。
4.用户可通过函数说明语句中的输出变量列表和输入变量列表来实现函数参数的传递。输出变量列表和输入变量列表不是必须的。
下面举例说明函数文件的调用和参数传递的过程。
function[m,s] = mean(a) % 定义函数文件 mean.m,a 为输入变量,m,s 为输出变量
% 该函数文件的作用是对指定向量求和及均值 l=length(a); s=sum(a); m=s/l;
% 计算输入向量的长度 % 对输入向量的元素求和
% 计算输入向量的元素的平均值
用户可通过如下指令调用该函数: >> a=1:9
% 准备好输入变量
>> [s,m]=mean(a)
48
s= 5 m= 45
3.4 全局变量与局部变量
用户在命令文件和函数文件中经常都要用到变量,但命令文件中的变量和函数文件中的变量却存在着较大的区别。函数文件中所使用的变量,除输入和输出变量以外,所有变量都是局部变量,它们与其他函数变量是相互隔离的,即变量只在函数内部起作用,在该函数返回之后,这些变量会自动在 MATLAB 的工作空间中清除掉。而命令文件中的变量是全局变量,工作空间的所有命令和函数都可以直接访问这些变量。 如果用户需要在多个函数中使用相同的变量,或想使这些中间变量在工作空间中起作用,则应该把他们设置成全局变量。全局变量的定义由命令“global”实现,一般在 M 函数的开头定义,命令形式为:
?
global A B C
不同的全局变量名用空格隔开。“global”命令应当在工作空间和 M 函数中都出现,如果只在一方出现,则不被承认为全局变量。另外,在 MATLAB 中对变量名是区分大小写的,因此,在程序中为了不与普通变量相混淆,习惯上我们将全局变量用大写字母表示。下面是在函数中如何使用全局变量的例子,首先创建函数文件 mean1.m。
function s = mean1 global BEG END k=BEG:END; s=sum(k);
% MATLAB 函数文件 mean1.m % 说明全局变量 BEG 和 END
% 由全局变量 BEG 和 END 创建向量 k % 对向量元素值求和
该函数是一个只有输出变量而无输入变量的函数,用户可以通过下面一系列命令来调用该函数。
>> global BEG END >> BEG=1; END=10; >> s1=mean1 s1= 55
>> BEG=1; END=20; >> s2=mean1 s2= 210
% 调用函数 mean1
% 在 MATLAB 工作空间里定义 BEG 和 END 为全局变量 % 调用函数 mean1
49
相关推荐: