整数类型
MATLAB中一共8种数据类型的整数,即4种有符号整数和4种无符号整数。有符号的整数类型能够表示正负正整数,无符号整数只能表示正整数和0。
MATLAB支持1,2,4,8字节的整数,分别又有有符号和无符号之分。所以在选用数据类型进行存储时选择合适的数据类型来表示数据可以为计算机节省空间并且提升运算速度。
创建有符号的16位整数
创建有符号的16位整数:
>> x = int16(32700)
x = 32700
如果输入的数字大于32767,则输出的数默认为32767,例如:
>> x = int16(32768)
x = 32767
这是因为216的值为65536,而有符号整数又包括正负数,所以有符号16位整数的取值范围为-32768~32767。
使用转换函数将其他数据类型转换为整型
>> str = 'hello'
>> int8(str)
ans =
104 101 108 108 111
从结果来看,是将str字符串里面的每一个字符转换为了对应的ASCII码。
使用whos()函数
>> whos str
Name Size Bytes Class Attributes
str 1x5 10 char
结果显示,此函数是显示一个变量的详细信息,如变量名称,大小,字节数,以及数据类型等。
使用class()查看数据类型
>> strType = class(str)
strType =
char
验证变量是否为整数
>> isinteger(x)
ans =
1
>> isinteger(str)
ans =
0
结果显示,使用isinteger()函数可以检验变量是否为整数,如果为整数则返回一个逻辑值1,否则返回一个逻辑值0。
小数类型
MATLAB 用双精度或单精度格式表示浮点数,默认格式是双精度,但可以用转换函数转换为单精度。
如果某个数据没有被指定数据类型,那么 MATLAB 会默认使用双精度浮点数来存储。为了得到其他类型的数值类型,可以使用类型转换函数。
单精度浮点数在内存中占4字节,可以使用double()来转换为双精度浮点数。双精度浮点数在内存中占8字节,可以使用single()来转换为单精度浮点数。
最大和最小双精度值
realmax() 和 realmin() 函数返回能够表示的最大和最小双精度值。
>> realmin
ans =
2.2251e-308
>> realmax
ans =
1.7977e+308
双精度数
如果一个数很大,需要将其设置为双精度数,否则单精度数是容纳不下的。MATLAB默认数值类型是双精度的,可以通过赋值语句直接得到双精度数。
>> doux = 3.14*10^100
doux =
3.1400e+100
同判定整数一样,也有相应的函数来判定一个数是不是一个双精度的浮点数,isfloat()函数可以做到。
>> isfloat(doux)
ans =
1
将其他数据类型转换为双精度数
使用 double() 函数,可以把其他数值型数据、字符、字符串等转换成双精度。
>> test = int64(324548751254)
test =
324548751254
>> double(test)
ans =
3.2455e+011
单精度浮点数
建立单精度浮点数需要使用single()函数。我们可以使用whos()函数来查看详细信息:
>> x = single(3.14159)
x =
3.1416
>> whos x
Name Size Bytes Class Attributes
x 1x1 4 single
从大小信息等可以看出来,使用此方式能够建立一个单精度的浮点数。同理,使用single()函数也可以将其他的数字、字符等转化为单精度数,这里省略。单精度数据之间或单精度与双精度数据之间的数学运算结果将为单精度数。
% 单精度数进行运算
>> x = single(3.14159)
>> y = single(6.28)
>> z = x + y
>> whos z
Name Size Bytes Class Attributes
z 1x1 4 single
% 双精度数与单精度数进行运算
>> k = 3.14
>> z = k + x
>> whos z
Name Size Bytes Class Attributes
z 1x1 4 single
单精度数据类型中包含双精度数据类型中常见的特殊浮点值 inf 和 NaN。
>> c = 0
>> c./c
ans =
NaN
>> 1./c
ans =
Inf
NaN
NaN 是 Not a Number 的缩写,意思是“不是一个有效的数字”。NaN 一般是在没有意义的数学计算中得到的,比如 0/0,Inf/Inf,Inf-Inf,Inf*0。上述例子中也有相应示例。对 NaN 进行运算的结果仍然是 NaN。在有些数组中可能会出现NaN,此时我们可以通过isnan()来寻找数组中的NaN。对应位置可以找到值为NaN的元素。
>> arr = [1 2 NaN inf]
arr =
1 2 NaN Inf
>> result = isnan(arr)
result =
0 0 1 0
由结果可知,isnan() 函数在数组中 NaN 的位置返回 1(true)。
空数组
空数组指的是一维或者多维的长度为0的数组变量。表达方式多种多样,最简单的一种表示方法为[ ]
。可以使用size()或者length()来查看其维度和长度等。
>> size([])
ans =
0 0
>> c = zeros(0,5)
c =
Empty matrix: 0-by-5
>> size(c)
ans =
0 5
>> d = ones(4,0) %创建多行的空数组
d =
Empty matrix: 4-by-0
>> size(d)
ans =
4 0
>> length(d) %包含四行,但是没有元素,长度还是为0
ans =
0
空数组有时也出现在一些函数的返回参数中。在 MATLAB 中,很多函数在无法返回适当结果时,往往会返回空数组。比如使用find()函数获取一些值的时候,如果没有查询到符合条件的信息,则可能返回一个空的数组。如:
>> x =[1 2 3 4 5]
x =
1 2 3 4 5
>> find(x>6)
ans =
Empty matrix: 1-by-0
想要在包含五个整数的数组中找到大于6的元素的索引值,但是没有找到,就返回了一个空的数组。和判定是否为整数类似,判定一个空数组是否是空的数组也可以使用isempty()函数来判定。
复数类型
形如C = a + bi
的式子,我们称之为复数。其中a
代表复数的实部,b
代表复数的虚部,C
为复数。a
和 b
均为实数,i
代表 -1 的开平方根。在 MATLAB 中用字母 i 或 j 中的一个表示,i 和 j 的作用是完全一样的。
复数的表示方式
复数有两种表示方式,一种是直角坐标表示,一种是极坐标表示。
直角坐标表示为平面中的一个点,横轴为 a,纵轴为 b,即坐标的横轴与纵轴分别代表复数的实部与虚部。极坐标表示公式如下:
c = a + bi = z∠θ
其中 z 代表向量的模,θ 代表辐角。直角坐标中的 a、b 和极坐标 z、θ 之间的关系为:
a = z cosθ
b = z sinθ
z = ( a2+b2) 1/2
θ = tan-1 (b/a)
创建复数
- 直接生成,即直接以数学形式定义出来。
>> x = 2 + 3i
x =
2.0000 + 3.0000i
- 使用complex()函数生成。
>> x=2
>> y=4
>> z=complex(x, y)
z =
2.0000 + 4.0000i
于是得到了一个实部为2,虚部为4的复数。可以看出complex函数的第一个参数代表了复数的实部,第二个参数是虚部。另外,如果complex函数只带有一各参数,则参数代表了所建复数的实部,虚部为0。例:
>> x=2
>> z=complex(x)
z =
2.0000 + 0.0000i
使用real() 和 imag() 函数可以把复数分为实数和虚数部分。
>> real(z) %返回实部
ans =
2
>> imag(z) %返回虚部
ans =
0
复数常见函数
函数名 | 描述 |
---|---|
conj(C) | 计算 c 的共轭复数,如果 c=a+bi,那么 conj(c)=a-bi |
real(C) | 返回复数 c 的实部 |
imag(C) | 返回复数 c 的虚部 |
isreal(C) | 如果数组 c 中没有一个元素有虚部,函数 isreal(c)将返回 1;所以如果一个数组 c 是 复数组成,那么 isreal(c) 将返回 0 |
abs(C) | 返回复数 c 的模 |
angle(C) | 返回复数 c 的幅角 |