一、数值类型
1、实数
Matlab的数值类型分为三种,整形,单精度浮点型和双精度浮点型,具体的情况如下。
有几个地方需要注意一下:
- 系统默认的数值类型是double的,所以使用double时可以省略double符号
- double类型的数值与其他类型的数值运算时,结果为其他类型的数值,single类型的数值不能和整型直接运算,各种不同位数的整形之间也不能直接运算。
因为系统默认的数据类型是双精度浮点,所以在将变量设置为整数时需要进行转换,matlab提供了如下的转化函数。
函数
|
运算法则
|
例子
|
floor
|
向下取整
|
floor(1.4)=1;floor(3.5)=3;floor(-3.5)=-4
|
ceil
|
向上取整
|
ceil(1.4)=2;ceil(3.5)=3;ceil(-3.5)=-3
|
round
|
取最接近的整数,如果小数部分是0.5,则向绝对值大的方向取整
|
round(1.4)=1;round(3.5)=4;round(-3.5)=-4
|
fix
|
向0取整
|
fix(1.4)=1;fix(3.5)=3;fix(-3.5)=-3
|
2、复数
复数由实部和虚部两部分构成,在Matlab中,字符i或j默认作为虚部标志,关于复数的相关函数如下:
函数
|
说明
|
函数
|
说明
|
complex(a,b)
|
构造以a为实部,以b为虚部的复数
|
i,j
|
虚部标识
|
real(z)
|
返回复数z的实部
|
image(z)
|
返回复数z的虚部
|
abs(z)
|
返回复数z的模
|
angle(z)
|
返回复数z的辅角
|
conj(z)
|
返回复数z的共轭复数
|
|
|
3、无穷量(Inf)和非数值量(NaN)
Matlab中使用Inf和-Inf分别表示正无穷大和负无穷大,NaN表示非数值量。正负无穷大一般是由于运算溢出产生,非数值量则是由于类似0/0或Inf/Inf类型的非正常运算产生。
二、字符与字符串
Matlab将文本作为特征字符串或简单地当做字符串,但是实际存储的是字符串的ASCII码。abs函数可以获得字符串的具体值,使用方法如下:
>> a=\'abc\'
a =
abc
>> abs(a)
ans =
97 98 99
三、结构
Matlab中也存在与C语言类似的结构这种类型,一个结构可以通过字段存储多个不同类型的数据。结构中的各个字段可以是不同的类型。
1、创建结构对象
有两种创建结构的方法,一种是逐一输入一个结构的各个属性,例如下面创建stu1的过程;另一种是使用struct函数,例如创建stu2的过程。
>> stu1.name=\'xing\';
>> stu1.sno=\'123\';
>> stu1
stu1 =
name: \'xing\'
sno: \'123\'
>> stu2=struct(\'name\',\'sno\',\'xiao\',\'234\')
stu2 =
name: \'sno\'
xiao: \'234\'
2、访问结构对象
使用结构名.属性名的方式可以获取结构的属性。
>> stu1.name
ans =
xing
3、连接结构对象
两个结构可以连接起来,但是要连接的这个两个结构的对应属性的类型应该相同。
>> stu1.name=\'xing\';
>> stu1.sno=int16(123);
>> stu2.name=\'xiao\';
>> stu2.sno=int16(456);
>> stu=[stu1,stu2]
stu =
1x2 struct array with fields:
name
sno
>> stu(1)
ans =
name: \'xing\'
sno: 123
四、单元数组
单元数组是一种广义矩阵。每一个单元可以包括一个任意数组,如数值数组、
字符数组、结构体数组或另外一个单元数组,因而每一个单元可以具有不同的尺寸和内存。
1、创建单元数组
有两种创建单元数组的方法:通过赋值语句或cell函数创建。
(a)使用赋值语句创建单元数组:单元数组使用花括号”{} ”来创建,使用“,”或空格来分隔单元,使用“;”来分行。
>> A={\'x\',[2;3;6];10,2*pi}
A =
\'x\' [3x1 double]
[10] [ 6.2832]
(b)使用cell函数创建空单元数组
>> B=cell(2,2)
B =
[] []
[] []
2、访问单元数组
在单元数组中,单元和单元中的内容属于不同范畴,这意味着访问单元和访问单元中的内容是两个不同的操作。对于单元数组C,C(m,n)指的是单元数组中第m行第n列的单元,而C{m,n}则是指的是第m行第n列的单元中的内容。
>> A(1,1)
ans =
\'x\'
>> A(1,2)
ans =
[3x1 double]
>> A{1,2}
ans =
2
3
6
3、单元数组的合并
>> C={\'a\',\'b\';\'c\',\'d\'}
C =
\'a\' \'b\'
\'c\' \'d\'
>> D={\'1\',\'2\'}
D =
\'1\' \'2\'
>> E={A;B}
E =
{2x2 cell}
{2x2 cell}
>> E{1,1}
ans =
\'x\' [3x1 double]
[10] [ 6.2832
五、映射容器
Matlab中的映射容器就是Map类,这里的Map类与java的Map类类似,也是一个key对应着一个value,Map类的所有对象都有三个属性:
- Count:表示Map中存储的键值对的数量
- KeyType:表示Map对象中包括的key的类型
- ValueType:表示Map中的数据类型
1、创建Map对象
>> mapObj=containers.Map({1,2},{\'xing\',\'xiao\'})
mapObj =
Map with properties:
Count: 2
KeyType: double
ValueType: char
2、查看和读取Map对象
可以通过使用keys函数查看Map对象中包含的所有键;通过values函数查看所有的值。
%获取所有的键
>> keys(mapObj)
ans =
[1] [2]
%获取所有的值
>> values(mapObj)
ans =
\'xing\' \'xiao\'
%获取指定键的值
>> mapObj(1)
ans =
xing
%获取多个值
>> values(mapObj,{1,2})
ans =
\'xing\' \'xiao\'
3、编辑Map对象
(1)添加键值对
>> mapObj(3)=\'ming\'
mapObj =
Map with properties:
Count: 3
KeyType: double
ValueType: char
>> values(mapObj)
ans =
\'xing\' \'xiao\' \'ming\'
(2)删除键值对
>> remove(mapObj,2)
ans =
Map with properties:
Count: 2
KeyType: double
ValueType: char
>> values(mapObj)
ans =
\'xing\' \'ming\'
(3)修改键值对
如果需要在值不变的情况下对键名进行修改,首先要删除键名和对应的值,然后再添加一个有正确键名的新条目。通过覆盖原有的值,可以在键名不变的情况下对值进行修改。
>> remove(mapObj,1)
ans =
Map with properties:
Count: 1
KeyType: double
ValueType: char
>> mapObj(11)=\'xing\'
mapObj =
Map with properties:
Count: 2
KeyType: double
ValueType: char
>> mapObj(3)=\'aaa\'
mapObj =
Map with properties:
Count: 2
KeyType: double
ValueType: char
>> keys(mapObj)
ans =
[3] [11]
>> values(mapObj)
ans =
\'aaa\' \'xing\'
六、数据类型之间的转换
类型识别函数:
函数
|
功能
|
函数
|
功能
|
iscell
|
判断是否为单元数组
|
isnumeric
|
判断是否为数值数组
|
isreal
|
判断是否为实数
|
ischar
|
判断是否为字符数组
|
isstr
|
判断是否为字符串
|
isfloat
|
判断是否为浮点数
|
isstruct
|
判断是否为结构数组
|
whos
|
列举变量类型及相关数据
|
类型转换函数:
函数
|
功能
|
函数
|
功能
|
dec2bin
|
十进制转为二进制
|
int2str
|
整数转为字符串
|
num2str
|
数值转为字符串
|
str2double
|
字符串转为double
|
请发表评论