Matlab提供了多种数据类型,包括数值类型、逻辑类型、字符串、函数句柄、结构数组和单元数组类型等,且在matlab中任何一种数据类型都以矩阵或者是数组形式来表示。注:这里的矩阵或是数组,是指最小的0x0或N维任何大小的矩阵或者数组。
基本的数值类型主要有整数、单精度浮点数和双精度浮点数三种类型。默认情况下,Matlab在存储数据时使用的双精度浮点数,用户不可以更改默认的数据类型和精度,但是可以选择用非默认的整数或者单精度浮点数来存储来存储矩阵或者数组。
整型类别 | 取值范围 | 函数 |
---|---|---|
有符号的8位整数 | -2的7次方至2^7 -1 | int8 |
有符号的16位整数 | -2的15次方至2^15 -1 | int16 |
有符号的32位整数 | -2的31次方至2^31 -1 | int32 |
有符号的64位整数 | -2的63次方至2^63 -1 | int64 |
无符号的8位整数 | 0到2^8 -1 | uint8 |
无符号的16位整数 | 0至2^16 -1 | uint16 |
无符号的32位整数 | 0至2^32 -1 | uint32 |
无符号的64位整数 | 0到2^64 -1 | uint64 |
在实际应用中,应根据实际需求合理选择合适的整数类型。由于MATLAB中数值的默认存储类型是双精度浮点数,因此将变量设置为整数类型时,需要使用相应的转换函数,将双精度浮点数装换为指定的整数类型。
在转换过程中,MATLAB默认将待转换数值转换为与之最接近的整数值。例如:
>> a = 2.4
a =
2.4000
>> b = int8(a)
b =
int8
2
函数 | 运算法则 | 备注 |
---|---|---|
floor(x) | 向下取整 | 不大于其最大的整数 |
ceil(x) | 向上取整 | 右取整 |
round(x) | 去最接近的整数,如果小数部分是0.5,则向绝对值大的方向取整 | 正数四舍五入,负数四舍五入后填负号 |
fix(x) | 向0取整 | 距离0最近的整数 |
单精度浮点型:single
双精度浮点型:double
单精度数组比双精度数组更能节省更多的内存空间,灵活运行可以更高效的利用内存。
逻辑数据类型,即仅有具有“true”和“false”两个数值的一种数据类型。true用1表示、false用0表示,在逻辑运算中,Matlab将所有的非零值作为逻辑true来进行计算,而将零值作为逻辑false来进行计算。
逻辑型数据一般可以通过直接赋值、根据表达式创建以及函数转化三种方式生成。
此方法是将true和false值直接赋值给变量。例如将true赋给a,false赋给b,最后通过whos查看变量的赋值情况。
>> a = true
a =
logical
1
>> b = false
b =
logical
0
>> whos
Name Size Bytes Class Attributes
a 1x1 1 logical
b 1x1 1 logical
Matlab逻辑运算符或函数将会返回逻辑型的true或者false。以下是常见的运算符和函数及对应的说明。
运算符或函数 | 说明 |
---|---|
&& | 具有短路作用的“与”操作,仅能处理标量 |
|| | 具有短路作用的“或”操作,仅能处理标量 |
== | 关系运算符,等于 |
~= | 关系运算符,不等于 |
< | 关系运算符,小于 |
> | 关系运算符,大于 |
& | 元素“与”操作 |
<= | 关系运算符,小于等于 |
>= | 关系运算符,大于等于 |
any | 当向量中的元素有非零元素时,返回true(也就是1) |
all | 当向量中的元素都是非零元素时,返回true |
xor | 逻辑“异或”操作 |
所有以is开头的函数 | 判断操作 |
例如:将表达式1>0的值赋给变量c,表达式1>5的值赋给变量d
>> c = 1 > 0
c =
logical
1
>> d = 1 > 5
d =
logical
0
函数的转化使用的是logical函数,可将任意类型的的数组转换为逻辑型。其中非零元素为true,零元素为false。
>> e = logical(6)
e =
logical
1
>> f = logical(0)
f =
logical
0
在遇到表达式中有较多运算符的时候,需要严格遵守以下的运算符计算优先级。
以下将matlab语言的优先级和计算优先级,按照从高到低的顺序进行排序。
结构是Matlab提供的一种将选择的数据存储到一个实体中的数据类型。结构可以由数据容器组成,容器叫做域,每个域中可以存储Matlab支持的数据类型。结构数组可以具有任何大小且是很重要的混合数据类型存储手段。
teacher就是以结构类型存储的数据,包含了4个元素。
>> teacher.name="Tom"
teacher.sex="male"
teacher.age=40
teacher.number=15689
teacher =
包含以下字段的 struct:
name: "Tom"
sex: "male"
age: 40
number: 15689
在变量区可以清晰的看到teacher结构数组包含的4个元素以及对应的值
struct函数可以根据指定的域及其相应的值创建结构体数组
这是基本的语法格式:
structure_array = struct('field1',{var1} 'field2', {var2}, ...)
structure_array = struct('field1', var1, 'field2', val2, ...)
利用以上语法格式创建一个student结构数组,输入完后直接按下Enter键,显示student的具体内容:
>> student=struct('name','henry','age',26,'grade',uint16(1))
student =
包含以下字段的 struct:
name: 'henry'
age: 26
grade: 1
>> whos
Name Size Bytes Class Attributes
student 1x1 524 struct
同样的,在变量区显示出具体的变量名称及其对应的值
语法格式:structName.fileName(fRows,fCols,...)
紧接着上例中的student结构,访问其内部的元素
>> student.name
ans =
'henry'
>> student.age
ans =
26
>> student.grade
ans =
uint16
1
增加结构数组域最常用的方法就是对其直接赋值,且增添子域的操作只会影响被操作的具体结构,而不影响整个结构数组。例如给student结构再添加一个元素address并为其赋值。
>> student=struct('name','henry','age',26,'grade',uint16(1))
student =
包含以下字段的 struct:
name: 'henry'
age: 26
grade: 1
>> student.address="Beijing"
student =
包含以下字段的 struct:
name: 'henry'
age: 26
grade: 1
address: "Beijing"
结构数组的删除:需要使用rmfield函数,此时会得到一个新的结构数组。
>> student=struct('name','henry','age',26,'grade',uint16(2))
student =
包含以下字段的 struct:
name: 'henry'
age: 26
grade: 2
>> student_array = rmfield(student,'age')
student_array =
包含以下字段的 struct:
name: 'henry'
grade: 2
若结构数组域中的内容是数值型的一般矩阵,那么适用于一般矩阵的数值操作和函数也可以应用于结构数组。
>> A.a=magic(3)
A =
包含以下字段的 struct:
a: [3×3 double]
>> A.a
ans =
8 1 6
3 5 7
4 9 2
>> A.a.^2
ans =
64 1 36
9 25 49
16 81 4
>> sqrt(A.a)
ans =
2.8284 1.0000 2.4495
1.7321 2.2361 2.6458
2.0000 3.0000 1.4142
未完待续。。。