与很多其他计算机语言一样,常数和变量是基本的语言元素。在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】在命令窗口中输入一些带常数的命令行,观察计算结果。
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才能将不同的变量区分开。
N = namelengthmax
N =
63
可以用isvarname函数确认变量名的合法性。如果变量名合法,则该函数返回1,否则返回0。
【例2-2】在命令窗口中输入
isvarname 8th_column
ans =
0
因为上面的变量名的第1个字母为8,非法,所以返回0。
注意:MATLAB用字符i和j表示虚数单位。如果涉及复数计算,则应避免把i和j用作变量名。
在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变量:
A=9
A =
9
注意:在将变量的值赋给另一个变量之前,必须确定等式右边的变量有值;否则会返回错误,例如在下面的语句中,a变量无值。
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:
VarFormat=10.1892
VarFormat =
10.1892
以15位定点格式输出变量值,在命令行中输入
format long
VarFormat
返回
VarFormat =
10.18920000000000
以15位浮点格式输出变量值,在命令行中输入
format long e
VarFormat
返回
VarFormat =
018920000000000e+01
以十六进制输出变量值,在命令行中输入
format hex
VarFormat
返回变量值
VarFormat =
402460ded288ce70