4.2 变量
在程序中经常会定义一些变量来保存和处理数据。从本质上看,变量代表了一段可操作的内存,也可以认为变量是内存的符号化表示。
当程序中需要使用内存时,可以定义某种类型的变量。此时编辑器根据变量的数据类型分配一定大小的内存空间,程序就可以通过变量名来访问对应的内存。本节将介绍MATLAB中变量的相关知识。
4.2.1 变量的命名
在MATLAB中,变量不需要预先声明就可以进行赋值。变量的命名遵循以下规则:
● 变量名和函数名对字母的大小写敏感,因此x和X是两个不同的变量;sin是MATLAB定义的正弦函数,而SIN不是。
● 变量名必须以字母开头,其后可以是任意字母或下画线,但是不能有空格、中文或标点。例如,_xy、a.b均为不合法的变量名,而classNum_x是一个合法的变量名。
● 不能使用MATLAB的关键字作为变量名。避免使用函数名作为变量名。如果变量采用函数名,则该函数失效,如设置变量名为“if”“end”等。
● 变量名最多可包含63个字符,从第64个字符开始之后的字符将被忽略。为了程序可读及维护方便,变量名一般代表一定的含义。
通过调用isvarname函数,可以验证用户指定的变量名是否为能被MATLAB接收的合法变量名。该函数返回值为1或0,表示合法或不合法。例如:
isvarname('_xy') ans = 0 % 返回值为0表明该变量名不合法 isvarname('claddNum_x') ans = 1 % 返回值为1表明该变量名合法
4.2.2 变量的类型
MATLAB将变量划分为三类:局部变量、全局变量和永久变量。
(1)局部变量。MATLAB中的每一个函数都有自己的局部变量,这些变量存储在该函数独立的工作区中,与其他函数的变量及主工作区中的变量分开存储。当该函数调用结束后,这些变量随之被删除,不会保存在内存中。
(2)全局变量。全局变量在定义该变量的全部工作区中有效。当在一个工作区内改变该变量的值时,该变量在其余工作区内的值也将改变。
通常,全局变量的变量名用大写字母来表示,并在函数体的开头位置进行定义,其格式如下:
global X_Val
使用全局变量的目的是减少数据传递的次数。然而,使用全局变量有一定的风险,容易造成错误,这种错误源自全局变量的工作原理。
(3)永久变量。永久变量用persistent声明,只能在M文件函数中定义和使用,只允许声明它的函数存取。当声明它的函数退出时,MATLAB不会从内存中清除它。例如,声明a为永久变量:
persistent a
4.2.3 MATLAB默认的特殊变量
MATLAB预定义了许多特殊变量,这些变量具有系统默认的含义,如表4-3所示。
表4-3 MATLAB中的特殊变量
特殊变量 |
描述 |
ans |
系统默认的用作保存运算结果的变量名 |
pi |
圆周率 |
eps |
机器零阈值,MATLAB中的最小值 |
inf |
表示无穷大 |
NaN或nan |
表示不定数 |
i或j |
虚数 |
nargin |
函数的输入参数个数 |
nargout |
函数的输出参数个数 |
realmin |
可用的最小正实数 |
realmax |
可用的最大正实数 |
bitmax |
可用的最大正整数(以双精度格式存储) |
varargin |
可变的函数输入参数个数 |
varargout |
可变的函数输出参数个数 |
beep |
使计算机发出“嘟嘟”声音 |
例4-1:特殊变量的应用示例。
根据圆的面积计算公式S=πr 2,计算半径为6的圆的面积。在命令行窗口中输入:
S = pi * (6 ^ 2)
得到结果:
S = 113.0973
4.2.4 关键字
关键字是MATLAB程序设计中常用到的流程控制变量,共有20个,如果用户将这些关键字作为变量名,则MATLAB会出现错误提示。在命令行窗口中输入命令iskeyword,即可查询这20个关键字:
iskeyword ans = 20×1 cell 数组 {'break' } {'case' } {'catch' } {'classdef' } {'continue' } {'else' } {'elseif' } {'end' } {'for' } {'function' } {'global' } {'if' } {'otherwise' } {'parfor' } {'persistent'} {'return' } {'spmd' } {'switch' } {'try' } {'while' }