MATLAB之编程基础

目录

1、变量

1.1命名规则

1.2变量类型

 1.3特殊变量

1.4关键字

2、M文件的控制结构

2.1顺序结构

2.2 if-else-end分支结构

 2.3switch-case结构

 2.4try-catch结构

2.5循环结构

  2.5.1  for循环

 2.5.3 while循环

3.其他指令

3.1 return指令

3.2输入函数

3.2.1 input

 3.2.2keyboard

3.2.3yesinput指令

3.3pause指令

3.4continue与break指令

3.4.1continue指令

3.4.2break指令

3.5error和warning指令


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特殊变量

MATLAB的特殊变量
变量名表示含义
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 系统给出的最新警告程序,并继续运行。