MATLAB语言不仅提供了丰富的数据类型,如实数、复数、向量、矩阵、字符串、多维数组、结构体、类和对象等,而且提供了众多的内置功能函数。这些数据在计算机中都以常量和变量的形式出现。
在程序运行过程中,其值不会改变的量叫常量,MATLAB中的常量有两种:数值数据和字符串数据。其中数值数据又分为整型数据、浮点型数据和复数型数据。
1.数值数据
(1)整型数据
整型数据是不带小数的数,有带符号整数和无符号整数之分。表1-2是MATLAB整型数据的类型、取值范围和对应的转换函数。
表1-2 MATLAB整型数据
(续)
【例1-1】 >> x=int8(327),其结果如下:
带符号8位整型数据的最大值是127,int8函数转换时只输出最大值。
(2)浮点型数据
浮点型数据有单精度(single)和双精度(double)之分,单精度型数据在内存中占4字节,双精度型实数在内存中占8字节,双精度型的数据精度更高。在MATLAB中,数据默认为双精度型。single函数可以将其他类型的数据转换为单精度型,double函数可以将其他类型的数据转换为双精度型。
(3)复数型数据
复数型数据包括实部和虚部两个部分,实部和虚部默认为双精度型。在MATLAB中,虚数单位用i或j表示、例如,1+2i与1+2j表示的是同一个复数,也可以写成1+2*i或1+2*j,这里将i或j看作运算量参与表达式的运算。
如果构成一个复数的实部或虚部不是常量,则使用complex函数生成复数。例如,complex(1,a)生成一个复数,其实部为1,虚部为a。可以使用real函数求复数的实部,imag函数求复数的虚部,abs函数求复数的模,angl函数求复数的幅角,conj函数求复数的共轭复数。
【例1-2】
复数z1=3+4i、z2=1+2i、
,计算
(4)数值的输出格式
MATLAB数值通常以不带小数的整数格式或带4位小数的浮点格式输出。如果输出结果中所有数值都是整数,则以整数格式输出;如果输出结果中有一个或多个元素是非整数,则以浮点数格式输出。MATLAB的运算总是以所能达到的最高精度计算,输出格式不会影响计算的精度,现在的计算机精度一般为32位小数。使用format命令可以改变屏幕输出的格式,也可以通过命令窗口的下拉菜单来改变屏幕输出的格式。format命令及其屏幕输出格式见表1-3。
表1-3 format命令及其屏幕输出格式
(续)
2.字符串数据
字符串也是常量的一种,是由若干个计算机系统中采用的字符组成的,由于字符串的特殊性,需要进行一些说明。
(1)字符串表示
在MATLAB中字符串是用单引号括起来的字符序列来表示的。字符串中的每个字符(包括空格)都是字符串变量(矩阵或向量)中的一个元素,字符串中的字符以ASCII码形式存储并区分大小,用函数abs可以看到字符的ASCII码。在MATLAB中,字符串和字符矩阵基本上是等价的,例如:>> s=['HAPPY']等价于>> s='HAPPY'。
(2)常用字符串函数
MATLAB常用字符串函数如表1-4所示。
表1-4 MATLAB常用字符串函数
(续)
【例1-3】 字符串举例。
比较b*2和str2num(b)*2。
变量是保存数据信息的一种最基本的数据类型。变量的命名应遵循如下规则:变量名必须以字母开头,变量名可以由字母、数字和下划线混合组成,变量名区分字母大小写。MATLAB保留了一些具有特定意义的永久变量,读者编程时可以直接使用,并尽量避免另外自定义,表1-5为MATLAB软件永久变量表。
表1-5 MATLAB软件永久变量表
根据运算性质不同,变量之间的运算可分为算术运算、关系运算和逻辑运算等,MATLAB运算以一定的规则进行,有些根据运算符来进行,有些则根据MATLAB命令函数来进行。
1.运算符
运算符有三类,分别是算术运算符、关系运算符和逻辑运算符。
(1)算术运算符
算术运算的表达式由字母或数字用运算符连接而成。MATLAB常用的算术运算符如表1-6所示。
表1-6 MATLAB常用的算术运算符
(2)关系运算符
关系运算主要用于比较数、字符串和矩阵之间的大小或不等关系,其结果只能为0(代表“假”,表示该关系不成立)或1(代表“真”,表示该关系成立)。MATLAB常用的关系运算符如表1-7所示。
表1-7 MATLAB常用的关系运算符
(3)逻辑运算符
逻辑运算的逻辑量只有0(假)和1(真)两个值,逻辑运算符如表1-8所示。
(4)各种运算符的优先级
在三种运算符中,算术运算符的优先级最高,其次是关系运算符,优先级最低的是逻辑运算符,但逻辑非的优先级别最高。
表1-8 逻辑运算符
2.基本函数
MATLAB提供了丰富的数学函数,如三角函数、对数函数、指数函数和复数函数等。表1-9列出了部分常用的数学函数。
表1-9 部分常用的数学函数
MATLAB还提供了一些关系运算函数,如表1-10所示。
表1-10 部分关系运算函数
矩阵是MATLAB数据处理的基本单元,MATLAB中的运算都是基于矩阵进行操作的。
1.矩阵赋值
MATLAB中的矩阵元素的行号和列号称为该元素的下标,是通过“( )”中的数字(行、列的标号)来标识的。矩阵元素可以通过其下标来引用,如 X ( i , j )表示 X 第 i 行第 j 列的元素。矩阵的赋值必须使用方括号“[]”包括矩阵的所有元素,同一行的元素之间必须用空格或逗号分隔,不同行之间必须用分号或回车符分隔,如:
MATLAB中矩阵元素除了从键盘直接输入外,也可以从文件或数据库中读取,详细内容可以参见第4章的相关内容。
为编程方便,MATLAB还提供了部分特殊的矩阵函数,如表1-11所示。
表1-11 部分特殊矩阵函数
MATLAB还有一种符号矩阵,可用于行列式公式推导,例如:
2.矩阵运算
MATLAB矩阵的运算有矩阵的算术运算、矩阵的关系运算和矩阵的逻辑运算,其中矩阵的关系运算和矩阵的逻辑运算主要是针对两个矩阵对应元素进行的,这里重点介绍矩阵的算术运算。表1-12是矩阵算术运算符及其说明。
表1-12 矩阵算术运算符及其说明
(续)
矩阵的函数运算是矩阵运算最实用的部分,MATLAB函数库提供了一些常用的矩阵运算函数,如表1-13所示。
表1-13 常用的矩阵运算函数
MATLAB是一种解释性程序设计语言,对程序边解释边执行,其命令有两种执行方式:一种是交互式的命令执行方式,另一种是程序执行方式。程序执行方式是将有关命令编成程序存储在一个文件中,当运行该程序后,MATLAB会自动依次执行该文件中的命令,直至全部命令执行完毕。MATLAB编程主要采用程序执行方式。
M文件是一个脚本文件,文件名必须以“.m”为扩展名,文件名不能为汉字或数字开头。M文件可以由任意的文本编辑软件来编辑。M文件根据调用方式的不同分为两种类型:脚本(script)文件和函数(function)文件。脚本文件是MATLAB命令或函数的组合,没有输入/输出参数,脚本文件可以访问MATLAB工作空间中的所有数据,在运行过程中产生的变量均是全局变量,这些变量一旦生成就一直保存在内存空间中,另外,脚本文件可以直接运行,在MATLAB命令行窗口输入脚本文件的名字,就会顺序执行脚本文件中的命令,如例1-4所示。
【例1-4】 执行脚本文件myvoice.m中的命令。
函数文件不能直接运行,需要以函数调用的形式来调用它,函数文件可以有输入参数,也可以返回输出参数,它的第一条可执行语句是以function引导的定义语句。在函数文件中的变量都是局部变量,函数文件一旦执行完毕,这些变量就自动消失。
函数文件第一行是函数定义行,其格式为:
需要注意的是,有无函数定义行是区分命令文件与函数文件的重要标志,函数体包含所有函数程序代码,是函数的主体部分,函数文件保存的文件名应与用户定义的函数名一致,在命令行窗口中以固定格式调用函数。
例如:函数f(x,y,z)=X 2 y+xZ 2 -2yz,请计算f(1,2,3)。在编辑器中编辑程序:
保存为test(文件名必须与函数名一致),然后在命令窗口中输入:
MATLAB允许在函数调用时同时返回多个变量。而一个函数又可以由多种格式进行调用,例如bode()函数可以由下面的格式调用。
其中bode()函数用来求取或绘制系统的Bode图,而系统在这里由传递函数分子num和分母den表示,还可以用下面的格式调用此函数。
其中(A,B,C,D)为系统的状态方程模型。尽管两种调用格式是完全不同的,MATLAB函数还是会自动识别到底是采用哪种格式调用该函数,从而得出正确的结论。
另外,MATLAB 2016a以后的版本提供了实时脚本(live script)功能,其实时编辑器提供一种新的方式来创建、编辑和运行MATLAB程序,实时脚本文件的扩展名为“.mlx”,除了基本的程序代码,还可以包含格式化文本、方程式、超链接和图像等,而且运行时能实时显示输出结果,增强了程序的描述效果。
与其他高级语言一样,MATLAB由顺序、条件和循环这三种基本控制结构组成,任何复杂的程序都可以由这三种基本结构构成。
1.顺序结构
顺序结构是指程序按照顺序依次执行各条指令,直到程序的最后一条语句为止,不需要任何特殊的流程控制。程序一般包括数据输入、数据处理和数据输出三个步骤。例如:
2.条件结构
条件结构又称为选择结构或分支结构,程序根据给定的条件是否成立来执行不同的操作。MATLAB中有if-else-end、switch-case-otherwise和try-catch-end三种条件结构程序语句。
(1)if-else-end语句
当有真和假两种条件时,if-else-end语句的结构为:
当需要多种条件执行不同的操作时,if-else-end语句的结构为:
【例1-5】 判断输入数是否为正。
(2)switch-case-otherwise语句
switch-case-otherwise语句的格式为:
switch语句和if语句类似。switch语句根据变量或表达式的取值不同分别执行不同的命令。
【例1-6】 根据菜单选择显示不同的函数。
(3)try-catch-end语句
MATLAB还提供了一种试探性执行语句try-catch-end,其格式为:
try-catch-end语句结构首先试探性地执行语句1,如果在此语句执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并终止这段语句的执行,转而执行语句段2中的语句。如果不出错,则转去执行end后面的语句。
3.循环结构
循环执行是计算机运行的重要特点,MATLAB提供了两种实现循环结构的语句:for循环语句和while循环语句。
(1)for循环语句
for循环语句调用格式为:
执行时,先将初始值赋值给循环变量,执行循环体语句,执行完一次循环后,循环变量增加一个步长的值,然后判断循环变量的值是否处于初始值和终止值之间,如果满足条件则继续执行循环体语句,如果不满足条件则跳出循环。
【例1-7】
已知
,当
n
=100时,求
x
的值。程序如下:
程序运行结果如下:
(2)while循环语句
while循环语句调用格式为:
while循环语句是通过判断循环条件是否满足来决定是否继续循环的一种循环控制语句,也称为条件循环语句。它的特点是先判断循环条件,条件满足时执行循环。其执行过程为,如果条件成立,则执行循环体语句,执行后再判断条件是否成立,如果不成立则跳出循环。
【例1-8】
利用while循环语句实现对
的求解。
disp(sum)运行结果如下: