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