一、MATLAB数据类型
默认情况下,MATLAB 存储所有数值变量为双精度浮点值。其他数据类型存储文本,整数或单精度值或单个变量中相关数据的组合。
MATLAB不需要任何类型声明或维度语句。当MATLAB遇到新的变量名称时,它将创建变量并分配适当的内存空间。
如果变量已经存在,则MATLAB将使用新内容替换原始内容,并在必要时分配新的存储空间。
例如:
total = 136;
上述语句创建一个名为total的1x1矩阵,并将值136存储在其中。
MATLAB数据类型
MATLAB提供15种基本数据类型,分别是8种整型数据、单精度浮点型、双精度浮点型、逻辑型、字符串型、单元数组、结构体类型和函数句柄。每种数据类型存储矩阵或数组形式的数据。矩阵或数组的最小值是0到0,并且是可以到任何大小的矩阵或数组。
下表显示了MATLAB中最常用的数据类型:下表显示了MATLAB中最常用的数据类型:
数据类型 | 描述 |
int8 |
8 位有符号整数 |
uint8 |
8 位无符号整数 |
int16 |
16 位有符号整数 |
uint16 |
16 位无符号整数 |
int32 |
32 位有符号整数 |
uint32 |
32 位无符号整数 |
int64 |
64 位有符号整数 |
uint64 |
64 位无符号整数 |
single |
单精度数值数据 |
double |
双精度数值数据 |
logical |
逻辑值为1 或0 ,分别代表true 和false |
char |
字符数据(字符串作为字符向量存储) |
单元格阵列 | 索引单元阵列,每个都能够存储不同维数和数据类型的数组 |
结构体 | C型结构,每个结构具有能够存储不同维数和数据类型的数组的命名字段 |
函数处理 | 指向一个函数的指针 |
用户类 | 用户定义的类构造的对象 |
Java类 | 从Java类构造的对象 |
示例
使用以下代码创建脚本文件(datatype1.m):
str = 'Hello World!' n = 2345 d = double(n) un = uint32(789.50) rn = 5678.92347 c = int32(rn)
当上述代码被编译和执行时,它产生以下结果:
Trial>> datatype1 str = 'Hello World!' n = 2345 d = 2345 un = uint32 790 rn = 5.6789e+03 c = int32 5679
数据类型转换
MATLAB提供了各种用于将一种数据类型转换为另一种数据类型的函数。 下表显示了数据类型转换函数:
函数 | 描述说明 |
char |
转换为字符数组(字符串) |
int2str |
将整数数据转换为字符串 |
mat2str |
将矩阵转换为字符串 |
num2str |
将数字转换为字符串 |
str2double |
将字符串转换为双精度值 |
str2num |
将字符串转换为数字 |
native2unicode |
将数字字节转换为Unicode字符 |
unicode2native |
将Unicode字符转换为数字字节 |
base2dec |
将基数N字符串转换为十进制数 |
bin2dec |
将二进制数字串转换为十进制数 |
dec2base |
将十进制转换为字符串中的N数字 |
dec2bin |
将十进制转换为字符串中的二进制数 |
dec2hex |
将十进制转换为十六进制数字 |
hex2dec |
将十六进制数字字符串转换为十进制数 |
hex2num |
将十六进制数字字符串转换为双精度数字 |
num2hex |
将单数转换为IEEE十六进制字符串 |
cell2mat |
将单元格数组转换为数组 |
cell2struct |
将单元格数组转换为结构数组 |
cellstr |
从字符数组创建字符串数组 |
mat2cell |
将数组转换为具有潜在不同大小的单元格的单元阵列 |
num2cell |
将数组转换为具有一致大小的单元格的单元阵列 |
struct2cell |
将结构转换为单元格数组 |
数据类型确定
MATLAB提供了用于识别变量数据类型的各种函数。
下表提供了确定变量数据类型的函数:
函数 | 描述说明 |
is |
检测状态 |
isa |
确定输入是否是指定类的对象 |
iscell |
确定输入是单元格数组 |
iscellstr |
确定输入是字符串的单元格数组 |
ischar |
确定项目是否是字符数组 |
isfield |
确定输入是否是结构数组字段 |
isfloat |
确定输入是否为浮点数组 |
ishghandle |
确定是否用于处理图形对象句柄 |
isinteger |
确定输入是否为整数数组 |
isjava |
确定输入是否为Java对象 |
islogical |
确定输入是否为逻辑数组 |
isnumeric |
确定输入是否是数字数组 |
isobject |
确定输入是否为MATLAB对象 |
isreal |
检查输入是否为实数数组 |
isscalar |
确定输入是否为标量 |
isstr |
确定输入是否是字符数组 |
isstruct |
确定输入是否是结构数组 |
isvector |
确定输入是否为向量 |
class |
确定对象的类 |
isscalar |
确定输入是否为标量 |
validateattributes |
检查数组的有效性 |
whos |
在工作区中列出变量,其大小和类型 |
示例
使用以下代码创建脚本文件:
x = 3 isinteger(x) isfloat(x) isvector(x) isscalar(x) isnumeric(x) x = 23.54 isinteger(x) isfloat(x) isvector(x) isscalar(x) isnumeric(x) x = [1 2 3] isinteger(x) isfloat(x) isvector(x) isscalar(x) x = 'Hello' isinteger(x) isfloat(x) isvector(x) isscalar(x) isnumeric(x)
运行文件后,产生以下结果:
x = 3 ans = 0 ans = 1 ans = 1 ans = 1 ans = 1 x = 1177/50 ans = 0 ans = 1 ans = 1 ans = 1 ans = 1 x = 1 2 3 ans = 0 ans = 1 ans = 1 ans = 0 x = Hello ans = 0 ans = 0 ans = 1 ans = 0 ans = 0
二、MATLAB运算符
MATLAB运算符
数组中唯一的值运算符是一个符号,它将要执行的数学或者逻辑操作传达给编译器执行。
MATLAB 设计工作主要是对整个矩阵和阵列。因此,运算符在 MATLAB 工作标和非标量数据。
MATLAB 的基本运算类型:
- 算术运算符
- 逻辑运算符
- 关系运算符
- 位运算
- 集合运算
算术运算符(算术运算符详解)
MATLAB 的工作针对的是整个矩阵和阵列,它允许两种不同类型的算术运算:
- 矩阵算术运算
- 阵列算术运算
矩阵的算术运算是线性代数中的定义相同。执行数组操作,无论是在一维和多维数组元素的元素。
矩阵运算符和数组运算符是有区别的句号(.)符号。然而,由于加法和减法运算矩阵和阵列是相同的,操作者这两种情况下是相同的。下表给出了运算符的简要说明:
运算符 | 描述 |
+ | 加法或一元加号。A + B将A和B。 A和B必须具有相同的尺寸,除非一个人是一个标量。一个标量,可以被添加到任何大小的矩阵。 |
- | 减法或一元减号。A - B,减去B从A和B必须具有相同的大小,除非是一个标量。可以从任意大小的矩阵中减去一个标量。 |
* | 矩阵乘法;是一个更精确的矩阵A和B的线性代数积, 矩阵乘法对于非纯量A和B,列一个数必须等于B.标量可以乘以一个任意大小的矩阵的行数。 |
.* | 数组的乘法;A.*B是数组A和B的元素积,A和B必须具有相同的大小,除非A、B中有一个是标量。 |
/ | 斜线或矩阵右除法;B/A与B * inv(A)大致相同。更确切地说: B/A = (A'B')' |
./ | 矩阵右除法;矩阵A与矩阵B相应元素相除(A、B为同维度的矩阵) |
.\ | 反斜杠或矩阵左除;如果A是一个方阵,AB是大致相同的INV(A)* B,除非它是以不同的方式计算。如果A是一个n*n的矩阵,B是一个n组成的列向量,或是由若干这样的列的矩阵,则X = AB 是方程 AX = B ,如果A严重缩小或者几乎为单数,则显示警告消息。 |
\ | 数组左除法;A. B是元素B(i,j)/A(i,j)的矩阵。A和B必须具有相同的大小,除非其中一个是标量。 |
^ | 矩阵的幂。X^P是X到幂P,如果p是标量;如果p是一个整数,则通过重复平方计算功率。如果整数为负数,X首先反转。对P值的计算,涉及到特征值和特征向量,即如果[ D ] = V,EIG(x),那么X^P = V * D.^P / V。 |
.^ | A.^B:A的每个元素的B次幂(A、B为同纬度的矩阵) |
' | 矩阵的转置;A'是复数矩阵A的线性代数转置,这是复共轭转置。 |
.' | 数组的转置;A.'是数组A的转置,对于复数矩阵,这不涉及共轭。 |
逻辑运算符(逻辑运算符详解)
MATLAB提供了两种类型的逻辑运算符和函数:
- Element-wise -这些运算符的逻辑阵列上运行相应的元素。
- Short-circuit -这些运算上的标量,逻辑表达式。
Element-wise 的逻辑运算符操作元素元素逻辑阵列。符号&,|和〜逻辑数组运算符AND,OR,NOT。
允许短路短路逻辑运算符,逻辑运算。符号 && 和 | | 是短路逻辑符 AND 和 OR。
关系运算符(关系运算符详解)
关系运算符标和非标量数据上也能正常工作。关系运算符对数组进行元素元素元素设置为逻辑1(真)的关系是真实的和元素设置为逻辑0(假),它是两个阵列,并返回一个同样大小的逻辑阵列之间的比较。
下表显示了 MATLAB 中的关系运算符:
运算符 | 描述 |
< | 小于 |
<= | 小于或等于 |
> | 大于 |
>= | 大于或等于 |
== | 等于 |
~= | 不等于 |
位运算(位运算详解)
位运算符位和执行位位操作。 &,|和^的真值表如下:
p | q | p & q | p | q | p ^ q |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
假设如果A= 60,B =13,他们现在以二进制格式将如下:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
MATLAB提供位运算,如'位','位'和'位不操作,移位操作等各种函数
以下的表格显示了常用的按位运算:
函数 | 目的/作用 |
bitand(a, b) | 当a、b是一个或数个无符号整数或无符号整数数组,返回参数a和b位和, |
bitcmp(a) | a的补码 |
bitget(a,pos) | 在指定位置pos中获取位,在整数数组a中 |
bitor(a, b) | 对数a和b按位或 |
bitset(a, pos) | a的集合点在一个特定的位置pos |
bitshift(a, k) | 返回一个移到左K位,相当于乘以2K。K负值对应的位权转移或除以2|K|向负无穷舍入到最近的整数。任何溢出位都被截断。 |
bitxor(a, b) | 对数a和b按位异或 |
swapbytes | 交换字节顺序 |
集合操作符(集合运算详细讲解)
MATLAB提供各种功能集合运算,如集,交集和测试组成员等。
下表是对一些常用的设置操作的例举与描述:
函数 | 描述 |
intersect(A,B) | 设置两个数组的交集;返回A和B所共有的值。返回的值按排序顺序排列。 |
intersect(A,B,'rows') | 将A和B的每一行作为单个实体处理,并返回A和B的公共行。返回的矩阵的行按排序顺序排列。 |
ismember(A,B) | 返回与A大小相同的数组,包含1(true),其中A的元素在其他地方的B中找到,它返回0(false)。 |
smember(A,B,'rows') | 将A和B的每一行作为单个实体处理,并返回一个包含1(true)的向量,其中矩阵A的行也是B的行;否则,它返回0(false)。 |
issorted(A) | 如果A的元素按排序顺序返回逻辑1(true),否则返回逻辑0(false)。输入A可以是向量,也可以是N-by-1或1-by-N的字符串数组。如果A和sort(A)的输出相等,则A被认为是排序的。 |
issorted(A, 'rows') | 如果二维矩阵A的行按排序顺序返回逻辑1(真),否则返回逻辑0(假)。 如果A和排序(A)的输出相等,则认为矩阵A被排序。 |
setdiff(A,B) | 设置两个数组的差值;返回不在B中的值。返回数组中的值按排序顺序排列。 |
setdiff(A,B,'rows') | 将每一行A和B行作为单个实体处理,并返回一个不在B中的行。返回的矩阵的行按排序顺序排列。 “行”选项不支持单元格数组。 |
setxor | 设置两个数组的异或 |
union | 设置两个数组的并集 |
unique | 数组中唯一的值 |