在MATLAB中,变量不需要预先声明就可以进行赋值。变量的命名遵循以下规则:
(1)变量名和函数名对字母的大小写敏感,因此x和X是两个不同的变量;
(2)变量名必须以字母开头,其后可以是任意字母或下画线,但是不能有空格、中文或标点。
(3)不能使用MATLAB的关键字作为变量名。避免使用函数名作为变量名。如果变量采用函数 名,则该函数失效,如设置变量名为“if”“end”等。
(4)变量名最多可包含63个字符,从第64个字符开始之后的字符将被忽略。为了程序可读及维护 方便,变量名一般代表一定的含义。
(2)全局变量。全局变量在定义该变量的全部工作区中有效。当在一个工作区内改变该变量的值时, 该变量在其余工作区内的值也将改变。 通常全局变量的变量名用大写字母来表示,并在函数体的开头位置进行定义,其格式如下:
使用全局变量的目的是减少数据传递的次数。然而,使用全局变量有一定的风险,容易造成错误,这种错误源自全局变量的工作原理。
(3)永久变量。永久变量用persistent声明,只能在M文件函数中定义和使用,只允许声明它的函数存取。当声明它的函数退出时,MATLAB不会从内存中清除它。例如,声明a为永久变量
变量名 | 表示含义 |
ans | 系统默认的用作保存运算结果的变量名 |
pi | 圆周率 |
eps | 机器零阀值,MATLAB中的最小值 |
inf | 表示无穷大 |
NaN或nan | 表示不定数 |
i或j | 虚数 |
nargin | 函数的输入参数个数 |
nargout | 函数的输出参数个数 |
realmin | 可用的最小正实数 |
realmax | 可用的最大正实数 |
bitmax | 可用的最大正整数(以双精度格式存储) |
varargin | 可变的函数输入参数个数 |
varargout | 可变的函数输出参数个数 |
beep | 使计算机发出“嘟嘟”声音 |
MATLAB平台上的控制结构包括顺序结构、if-else-end分支结构、switch-case结构、try-catch结构、 for循环结构和while循环结构,这6种结构的算法及使用与其他计算机编程语言十分类似,有编程基础的朋友可以很快掌握。
if语句若判决条件为真,则执行命令组,否则跳过该命令组如下例:
情形1:
情形2:
switch语句执行基于变量或表达式值的语句组,关键字case和otherwise用于描述语句组。只执行第一个 匹配的情形。用到switch则必须用end与之搭配。switch-case的具体语法结构如下:
说明:
(1)switch-case结构的调用格式保证了至少有一组指令组将会被执行。
(2)switch指令之后的表达式value应为一个标量或一个字符串。当表达式为标量时,比较命令为表达 式==检测值;而当表达式为字符串时,MATLAB将会调用字符串函数strcmp来进行比较,即strcmp(表达式, 检测值)。
(3)case指令之后的检测值不仅可以是一个标量或一个字符串,还可以是一个元胞数组。如果检测时是一个元胞数组,则MATLAB将会把表达式的值与元胞数组中的所有元素进行比较。如果元胞数组中有某个元素与表达式的值相等,MATLAB则认为此次比较的结果为真,从而执行与该次检测相对应的命令组。
try command1 %命令组1先被执行,若正确,则执行完后结束此结构catch command2 %命令组1错误时,执行命令组2end
说明:
(1)只有当MATLAB执行命令组1发生错误时,才执行命令组2。try-catch结构只提供两个可供选择的命令组。
(2)当执行command1发生错误时,可调用lasterr函数查询出错的原因。如果函数lasterr的运行结果为 空字符串,则表示命令组1被成功执行了。
(3)如果执行命令组2时又发生错误,则MATLAB将会终止该结构。
首先看一个例子:
for i = 1:4 for j = 1:4 if i>(5-j) A(i,j)=0; else A(i,j)=i+j- 1; end endendA
(1)for指令后面的变量i称为循环变量,而for与end之间的命令commands被称为循环体。循环体被重复执行的次数是确定的,该次数由array数组的列数来确定。因此,在for循环过程中,循环变量i被依次赋值为数组array的各列,每次赋值,循环体都被执行一次(上述例子为一个循环嵌套)。
(2)for循环内部语句末尾的分号隐藏重复的打印,若commands指令中包含变量,则循环后在命令行窗口中直接输入变量A来显示变量A经过循环后的最终结果。
while循环 结构的具体句法形式如下:
while expression commandsend
说明:
(1)在while和end之间的命令组被称为循环体。MATLAB在运行while循环之前,首先检测expression 的值,若其逻辑值为真,则执行命令组;命令组第一次执行完毕后,继续检测expression的逻辑值,若其逻 辑值仍为真,则循环执行命令组,直到表达式expression的逻辑值为假时,结束while循环。
(2)while循环和for循环的区别在于,while循环结构的循环体被执行的次数是不确定的,而for循环中 循环体被执行的次数是确定的。
(3)一般情况下,表达式的值都是标量值,但是在MATLAB中也同样运行表达式为数组的情况。当表达式为数组且数组所有元素的逻辑值均为真时,while循环才继续执行命令组。
(4)如果while指令后的表达式为空数组,那么MATLAB默认表达式的值为假,直接结束循环。
(5)在if-else-end分支结构中提到的有关变量比较的注意事项,对while循环也同样适用。
通常,当被调用函数执行完成后,MATLAB会自动将控制权转回主函数或Commands窗口。但是如果在被调用函数中插入return指令,则可以强制MATLAB结束执行该函数并把控制权转出。
input指令将MATLAB的控制权暂时交给用户,用户通过键盘输入数值、字符串或表达式等,并按
Enter键将输入内容传递到工作区,同时把控制权交还给MATLAB。其常用的调用格式如下。
● Value=input('message'):将用户输入的内容赋值给变量Value(输入数值、字符串等各种形式的数据)。
● Value=input('message','s'):将用户输入的内容以字符串的形式赋值给变量Value。
当执行遇到keyboard指令时,MATLAB将控制权暂时交给键盘,用户可以由键盘输入各种合法的 MATLAB指令。只有当用户输入完成,并输入return指令后,控制权才交还给MATLAB。
input和keyboard指令的不同之处在于:keyboard指令允许输入任意多个MATLAB指令,而input指令只允 许用户输入赋值给变量的“值”,即数组、字符串或元胞数组等。
yesinput指令是一个只能输入的指令,它提供的输入值是一个默认量,并可以对输入范围进行检查,其调用格式如下。
Value=yesinput('Prompt',Default,Possib)。
说明:
(1)yesinput指令涉及用户和MATLAB之间的交互,因此无法在notebook程序中运行。
(2)Prompt为文字提示,Default为默认的设置值,Possib为可选值。
(3)当yesinput指令运行后,如果用户不输入任何值,则变量Value将接收默认值。
pause指令的功能为控制执行文件的暂停与恢复,其调用格式如下。
● pause:暂停执行文件,等待用户按任意键继续。
● pause(n):在继续执行文件之前,暂停n秒。
continue语句把控制权传给下一个在其中出现的for或while循环的迭代,忽略任何循环体中保留的语句。 在嵌套循环中,continue语句把控制权传给下一个for或while循环所嵌套的迭代。
%如果i大于2把控制权传给下一个在其中出现的forcount = 0;for i = 1:4 if (i>2) continue; end count = count+1;endcount
最后count的值为2;
在for循环或while循环结构中,有时并不需要运行到最后一次循环用户就已经得到了所需要的结果,那 么后面的循环就变成冗余的了,消耗了运算时间并占用了内存。
break指令可进行对for循环或while循环结构的终止,通过使用break指令,可以不必等待循环的预定结束时刻,而是根据循环内部设置的终止项来判断。
若终止项满足,则可以使用break指令退出循环;若终止项始终未满足,则照常运行至循环的预定结束时刻。
%如果数组a的0元素个数大于等于3则退出循环a=[0 1 0 2 0 0 2 6 0 4 0 0 0 0 0 3];l=length(a);count = 0;for i = 1:l if (a(i) == 0) count = count+1; end if(count >= 3) break; endendcount
在编写M文件时,常用的错误或警告指令的调用格式有以下几种。
● error('message'):显示出错信息message,终止程序。
● errortrap:错误发生后,控制程序继续执行与否的开关。
● lasterr:显示MATLAB系统判断的最新出错原因,并终止程序。
● warning('message'):显示警告信息message,继续运行程序。
● lastwarn:显示MATLAB系统给出的最新警告程序,并继续运行。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删