常数和变量

与很多其他计算机语言一样,常数和变量是基本的语言元素。在MATLAB中使用变量比在其他语言中要方便一些:不必声明变量的数据类型,只要用表达式给变量赋值就可以创建该变量。[大谦MATLAB,dqmatlab点com]

常数

MATLAB提供了一些内部常数,如表2-1所示。这些常数定义了在MATLAB应用和编程中常常要用到的数据,如计算精度、圆周率等。

表2-1 MATLAB提供的内部常数

常 数 返 回 值
ans 默认变量名,保存最近的结果。如果不给表达式指定一个输出变量,则MATLAB会自动将结果保存到ans变量中
eps 浮点相对精度,是MATLAB用于计算的容限
realmax 计算机可以表示的最大浮点数
realmin 计算机可以表示的最小浮点数
intmax 整数类型的最大值
intmin 整数类型的最小值
flintmax 浮点类型的最大连续整数
pi 圆周率
i,j 虚数单位
inf 无限值。类似n/0的表达式生成的结果就是inf,其中n为非0实数
NaN 表示不合法的数值。非数值。类似0/0和inf/inf的表达式生成的结果,与NaN有关的算术运算结果,以及n/0,n为复数时的计算结果都是NaN
computer 计算机类型
version MATLAB版本字符串

表2-1中所列的常数可以不必声明,直接应用于MATLAB编程。

【例2-1】在命令窗口中输入一些带常数的命令行,观察计算结果。

code.matlab
a = abs(3+4i)
a =
     5
z = sqrt(besselk(4/3,rho-i))
z =
   0.3730+ 0.3214i
huge = exp(log(realmax))
huge =
  1.7977e+308
toobig = pi*huge
toobig =
   Inf

变量

1.变量名

MATLAB变量名的第1个字符必须是字母,后面可以跟字母、数字和下画线的任何组合。

注意:MATLAB中的变量名会区分大小写,所以A和a是不同的变量。

尽管变量名的长度没有限制,但是MATLAB只使用变量名的前N个字符,后面的字符被忽略。这里,N是函数namelengthmax的返回值。所以,使变量名的前N个字符唯一是很重要的,这样MATLAB才能将不同的变量区分开。

code.matlab
N = namelengthmax
N =
    63

可以用isvarname函数确认变量名的合法性。如果变量名合法,则该函数返回1,否则返回0。

【例2-2】在命令窗口中输入

code.matlab
isvarname 8th_column
ans =
     0

因为上面的变量名的第1个字母为8,非法,所以返回0。

注意:MATLAB用字符i和j表示虚数单位。如果涉及复数计算,则应避免把i和j用作变量名。

在MATLAB中预留了一些关键字并且不允许调用它们,如果在调用过程中使用了它们,则可能会导致类似下面的出错信息:

code.matlab
Error: Expected a variable, function, or constant, found "=".
Error: "End of Input" expected, "case" found.
Error: Missing operator, comma, or semicolon.
Error: "identifier" expected, "=" found

使用不带输入变量的iskeyword函数可以列出所有预留的关键字。

2.创建变量

在MATLAB中创建变量很简单:不必声明变量的数据类型。

【例2-3】在命令窗口中输入下面的命令行就可以创建一个A变量:

code.matlab
A=9
A =
     9

注意:在将变量的值赋给另一个变量之前,必须确定等式右边的变量有值;否则会返回错误,例如在下面的语句中,a变量无值。

code.matlab
A=a
未定义函数或变量 'a'

如果变量已经存在,给它赋值则会替换它的当前值。

变量的数据类型

MATLAB中提供的数据类型有十余种之多,如图2-1所示。但所有的MATLAB变量,不管是什么类型的,都以数组或矩阵的形式被保存。矩阵是数组的二维版本。

图2-1 MATLAB提供的数据类型

表2-2中综述了MATLAB中的各种数据类型。

表2-2 MATLAB的数据类型

数据类型 举 例 描 述
逻辑型数组 magic(4)>10 只能包含1,0或true,false。任何非0值都被转换为值1
字符型数组 'Hello' 每个字符的长度为16位。该数组即为字符串
int8,uint8,int16,uint16, int32,uint32,int64,uint64 uint8(magic(3)) 长度为8位、16位、32位和64位的有符号和无符号整型数组。在内存足够的情况下,可以用它们进行整型操作
single 3*10^38 单精度数值型数组。单精度类型的数据需要的存储量比双精度类型的数据少,但精度稍微差一些
double 3*10^3005+6i 双精度数值型数组是MATLAB中最常用的变量类型
日期和时间 t = datetime('now') 高效的日期和时间计算、比较以及格式化显示方式

续表

数据类型 举 例 描 述
分类数组 s = categorical({'大';'小';'大';'中';'小'}) 定性数据数组,其值是离散的非数值类型的有限集
参见2.7节 表由若干行向变量和若干列向变量组成。表格中的每个变量可以具有不同的数据类型和大小
时间表 参见2.8节 表格形式的具有时间戳的数据
单元数组 {17 'hello' eye(2)} 单元数组的元素包含其他数组。它可以将不同大小的有关系的数据和信息集中到一起
结构数组 a.day = 12;a.color = 'Red';a.mat = magic(3); 结构数组具有字段名。这些字段包含其他数组。与单元数组类似,结构数组也将有关系的数据和信息集中起来
函数句柄 @humps MATLAB函数的句柄。函数句柄可以在变量列表中进行传递,并用feval函数进行计算
映射容器类 包含用于编制值索引的键的对象,键不必为整数
时间序列类 创建和合并时间序列对象
自定义类 inline('sin(x)') MATLAB类。该自定义类用MATLAB函数创建
Java类 java.awt.Frame Java类。可以使用Java API或第三方定义的已经存在的类,或者用Java语言创建自己的类

在MATLAB中进行数值计算的,默认所有变量都为double型。使用format命令,可以设置变量的输出格式。

【例2-4】在命令窗口中输入下面的命令行,创建变量VarFormat:

code.matlab
VarFormat=10.1892
VarFormat =
   10.1892

以15位定点格式输出变量值,在命令行中输入

code.matlab
format long
VarFormat

返回

code.matlab
VarFormat =
    10.18920000000000

以15位浮点格式输出变量值,在命令行中输入

code.matlab
format long e
VarFormat

返回

code.matlab
VarFormat =
018920000000000e+01

以十六进制输出变量值,在命令行中输入

code.matlab
format hex
VarFormat

返回变量值

code.matlab
VarFormat =
   402460ded288ce70