本文是MATLAB基础知识--数据类型的总结笔记
声明方式:name(num) name是类型种类,分为有符号x位整数int8、int16、int32、int64,无符号x位整数uint8、uint16、uint32、uint64。
范围:有符号范围(-2^(x-1), 2^(x-1)-1),无符号范围(0, 2^x-1)。
转换:
整数可以转换成整数,可以使用typecast(例子:typecast(uint16(511),'uint8'))注意后面的单引号
其他数据类型也可以转换为整数,有以下取整函数
函数 | 运算法则 | 实例 |
floor(x) | 向下取整 | floor(1.2)=1 floor(-2.5)=-3 |
ceil(x) | 向上取整 | ceil(1.2)=2 ceil(-2.5)=-2 |
round(x) | 取最接近的.整数 如果小数部分是0.5,则向绝对值 大的地方取整 |
round(1.2)=1 round(2.5)=3 round(-2.5)=-2 |
fix(x) | 向0取整 | fix(1.2)=1 fix(2.5)=2 round(-2.5)=-2 |
声明方式:name(num) 分为single单精度 double双精度(在MATLAB中,单精度浮点类型不能和整型运算 && double无需声明)
范围:
单精度32位宽,0~22小数,23~30指数,31符号(0正1负)
双精度64位宽,0~51小数,52~62指数,63符号
浮点数使用的函数:eps(n) 表示和n相邻最近的下一个浮点数之间距离是多少,这也说明了浮点数是离散的
是一种直接用函数建立的数据类型
创建复数:z=complex(a,b)
返回复数实部:real(z)
返回复数虚部:imag(z)
返回复数模:abs(z)
返回复数辐角:angle(z)
返回复数的共轭:conj(z)
Inf:运算结果溢出得到了超出浮点数精度范围的数
NaN:由非正常运算得到(如0/0,Inf/Inf),两个NaN互不相等
非数:超出了运算范围的数,实部为NaN,虚部为Inf
关系操作符:< <= > >= == ~=
作用:比较同样大小的数组,或者比较一个数组和一个标量,此时是标量和数组中每一个数比较,结果长度和数组长度一致(如0 0 1 0 0 1 0)
逻辑运算符:
A | B | A & B(与运算) | A | B(或运算) | xor(A,B)(亦或运算) |
0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
any(x) 判断是否为零向量或者零矩阵,是则返回1
另有众多测量特殊值条件是否存在的函数,见书P24
特点:
1.屏幕显示出来的是文本,非ASCII数字
(用whos指令检查变量的1.矩阵规模(size)2.所占空间(bytes)3.类型(class))
2.直接和数字相加结果为每个字符对应编码和相加数字之和
3.size(string)会得到ans=a b 分别为行列
4. 中括号连接两个字符串(w = [u v])
5.单引号用‘’打在句子里
6.冒号的作用是类似计数器(String(10:-1:7)意思是从第十个倒着输出到第七个)
调用函数,重复使用
如f=@sin f(x)就是求sin(x)
相当于数据容器,把多个相关联的不同类型数据封装在一个结构体对象中
直接创建:用“.”直接创建即可,如student.name=... student.class=...,就自动存储到结构体里面
struct创建:array=struct(‘name’,value,‘name2’,value2,......)
注意:当value是数组时,在所有value长度相同时,array(n)表示取各自第几个value
数组的定义是广义的,可以是任意的数据类型,如数字,字符,指针等
数组,即阵列,强调元素对元素的运算
创建:
array=[1 2 3 4 5 6]
array= i : k 或 array= i : j : k (j为步长,i为起点,k为终点,而且冒号前后的数必须是实数标量)
array=linspace(a, b, 100) 表示a~b建立100个元素的向量,这些向量把整个区间线性分割
广义矩阵,每一个元素都可以是一个任意数组(数值数组,结构体数组,字符串数组 ...)甚至是另一个单元数组,因此每一个单元数组都有不同的内存空间,这样的好处是可以把不同类型的数据归并到一个数组中。
赋值语句创建:分号分行,逗号或者空格分列 如c={‘x’,[1;5;6] ; 10,pi} 是两行两列的单元数组
cell函数创建:cellname = cell(a,b)创建一个a*b的空单元数组,每一个单元都是空矩阵
在单元数组中,单元和单元中的内容是两种东西
第m行n列的单元名:c(m,n)
第m行n列的单元内容:c{m,n}
合并:c = {a b} 直接把a,b两个单元数组作为c这个单元数组的内容
删除:c = {m n} = [ ] 想删除哪个,直接赋给空值即可
变形:newc = reshape(c, 1, 4) 相当于把原来的c从四行一列变成一行四列
相当于一种映射,将一个key映射成一个value
key称为键,可以是1*N字符串,单双精度实数标量,整数
一个map是一个对象,map有三种属性,Count表示储存key的个数,KeyType表示key类型,ValueType表示value的类型
mapname = containers.Map({key1, key2, ...} , {value1, value2, ...}) 当键和值是字符串时需要加单引号
keys(mapname) 得到所有key的名称
values(mapname)得到所有value的名称
course = mapname(KeyName) 可以读取对应key的value
values(mapname, {'keyname1' , 'keyname2' , ...}) 可以读取两个及以上对应key的value
删除key/value对:remove('mapname' , 'keyname')
添加key/value对:mapname(newkeyname) = 'newvalue' 注意key的名字一定要是新的
修改key:只能做到删除后添加
修改value:mapname(keyname) = 'newvalue' 注意key是已经拥有的键