【Matlab学习1.2】数值数据
数值数据类型的分类
整型
Y = int8(
将 X
)X
中的值转换为 int8
类型。超出范围 [-27, 27-1] (二进制)的值映射到最近的端点。(对比C语言,当一个整数的值超出了它的存储范围时,就会发生溢出。)
对比:
当一个整数的值超出了它的存储范围时 | 结果 | |
C语言 |
发生溢出 例1.2.1:
最终输出的结果为 说明发生溢出 |
|
Matlab |
映射到最近的端点。 例1.2.2:
最终输出的结果为 说明映射到最近的端点。 |
易错点注意:
输入时是int8()
或uint16()
等等,不是int()
,int 函数是计算定积分和不定积分的函数。
例1.2.3:
#int8的存储数值为-128~127
#uint8的存储数值为0~255
>> x = int8(129)
>> x = uint8(129)
>> x = int8(-128)
>> x = uint8(-128)
最终输出结果为
127
129
-128
0
注:在其存储范围内的小数转化为整数时,会采用四舍五入的办法取整(类似之后提到的 round 函数)。
浮点型
浮点型数据分为单精度型和双精度类型,单精度型实数在内存中占用4个字节,而双精度型实数在内存中占用8个字节.所以双精度型的数据精度更高。
single 函数:将其他类型的数据转换为单精度型。(区别于C语言中的 float )
double 函数:将其他类型的数据转换为双精度型。
例1.2.4:
#class函数用于返回类的名称。
>> class(4)
>> class(single(4))
由此说明,在 Matlab 中,数值数据默认是双精度型(double)。
涉及整数和浮点数的算术运算时,个人感觉是先全部转化成精度最高的数据类型进行计算,再将结果转化为精度最低的数据类型输出。
复型
复型数据包括实部和虚部两个部分,实部和虚部默认为双精度型,虚数单位用i或j来表示。
real 函数:求复数的实部。
imag 函数:求复数的虚部 。
例1.2.5:
在 Matlab 中输入下列代码,并思考在 Matlab 中,3 + 4i 和 3 + 4 * i 有区别吗?
>> clear
>> 3 + 4i
>> 3 + 4j
>> i = 5;
>> 3 + 4i
>> 3 + 4 * i
>> 3 + 4 * j
>> 3 + 4j
当 i 未被赋值时,3 + 4i,3 + 4 * i,3 + 4 * j 和 3 + 4j 的执行结果均为 3.0000 + 4.0000i
当 i 被赋值时,3 + 4 * i 就是一个算术表达式
数值数据的输出格式
可以用 format 函数来设置数值数据的输出格式
例1.2.6:
>> format long
>> 50/3
>> format
>> 50/3
有关 format 函数
点击跳转官方文档——设置输出显示格式
常用数学函数
函数的调用格式
函数的调用格式为:函数名(函数自变量的值)
例1.2.7:
>> A=[4,2;3,6]
>> B=exp(A)
函数在运算时是将函数逐项作用于矩阵的每个元素上,所以最后运算的结果就是一个与自变量同型的矩阵。
常用函数的应用
各个函数应用举例详见最后例1.2.8
更多有关初等函数的介绍详见官方文档——初等数学 — 函数
ex
exp(x)
表示 ex。
(指数: exponent)
三角函数
三角函数有以弧度为单位的函数和以角度为单位的函数,如果是以角度为单位的函数就在函数名后面加“d”,以示区别。
>> sin(pi/2) #sin函数计算弧度
>> sind(90) #sind函数计算角度
更多有关三角函数的函数详见官方文档——三角学(结果以弧度或度为单位的正弦、余弦和相关函数)
abs 函数
abs 函数可以求实数的绝对值、复数的模、字符串的 ASCII 码值。
取整的函数
用于取整的函数有fix、floor、ceil、round。
英语含义 | Matlab 中取整规则 | |
round | (BrE) round = around 大约 | 四舍五入 |
ceil | ceiling n. 天花板;最高限度 |
向上取整 |
floor | floor n. 地板;底价 |
向下取整 取小于等于这个数的第一个整数 |
fix |
fix n. |
固定取靠近0的那个整数 |
余数
rem函数 | mod函数 |
求余运算 | 取模运算 |
r = rem( 返回 a 除以 b 后的余数,其中 a 是被除数,b 是除数 |
b = mod( 返回 a 除以 m 后的余数,其中 a 是被除数,m 是除数 |
表达式为 r = a - b.*fix(a./b) |
表达式为 b = a - m.*floor(a./m) |
rem函数遵从 rem(a,0) 是 NaN 的约定 |
mod函数遵从 mod(a,0) 返回 a 的约定 |
rem函数生成一个为零或与被除数具有相同符号的结果 | mod函数生成一个为零或与除数具有相同符号的结果 |
质数/素数
TF = isprime(
返回与 X
)X
大小相同的逻辑数组。如果 X(i)
为质数,则 TF(i)
的值为 true
;否则,值为 false
。
find 函数
find 函数查找非零元素的索引。
对数函数
Y = log(
返回数组 X
)X
中每个元素的自然对数 ln(x)。
Y = log2(
计算 X
)X
的元素以 2 为底的对数。
Y = log10(
返回数组 X
)X
中每个元素的常用对数(以 10 为底)。
例1.2.8 函数应用举例:
函数应用举例1——上述各函数举例:#exp函数举例
>> exp(3)
ans =
20.0855
#三角函数举例
>> sin(pi/2)
ans =
1
>> sind(90)
ans =
1
#abs函数举例
>> abs(-4)
ans =
4
>> abs(3+4i)
ans =
5
>> abs('a')
ans =
97
#取整函数举例
>> round(4.7)
ans =
5
>> fix(-3.2)
ans =
-3
>> floor(3.6)
ans =
3
>> ceil(-3.8)
ans =
-3
#余数函数举例
>> rem(100,3)
ans =
1
>> mod(100,3)
ans =
1
>> rem(-100,3)
ans =
-1
>> mod(-100,3)
ans =
2
>> rem(100,-3)
ans =
1
>> mod(100,-3)
ans =
-2
#isprime函数举例
>> isprime(12)
ans =
logical
0
>> isprime(17)
ans =
logical
1
#find函数举例
#在 3×3 矩阵中查找非零元素
>> X = [1 0 2; 0 1 1; 0 0 4]
X =
1 0 2
0 1 1
0 0 4
>> k = find(X) #查看非零元素对应索引
k =
1
5
7
8
9
>> X(k) #查看 X 的对应元素
ans =
1
1
2
1
4
#对数函数举例
>> log(10)
ans =
2.3026
>> log2(256)
ans =
8
>> log10(0.01)
ans =
-2
函数应用举例2——分别求一个三位正整数的个位数字、十位数字和百位数字:
>> m = 345;
>> m1 = rem(m,10)
m1 =
5
>> m2 = rem(fix(m/10),10)
m2 =
4
>> m3 = fix(m/100)
m3 =
3
函数应用举例3——求[1,100]区间的所有素数:
>> x = 1:100;
>> k = isprime(x);
>> k1 = find(k);
>> p = x(k1)
p =
列 1 至 13
2 3 5 7 11 13 17 19 23 29 31 37 41
列 14 至 25
43 47 53 59 61 67 71 73 79 83 89 97
思考:求以5为底的对数,该如何计算?
答案:
利用换底公式 $\log _{a}(b)=\cfrac{\log _{c}(b)}{\log _{c}(a)}$,通过log()
、log2()
和log10()
构造出换底后的式子。
例1.2.9:
求 $\log _{5}(29)$ 的值。
由换底公式可知 $\log _{5}(29)=\cfrac{\ln29}{\ln5}$。
>> log(29)/log(5)
ans =
2.0922