第2章 MATLAB基础知识——2.1 数据类型(1)

简介: 第2章 MATLAB基础知识——2.1 数据类型(1)

第2章  MATLAB基础知识


知识要点

MATLAB是一个大型运算平台,参与运算的对象有数据流、信号流、逻辑关系等。如同计算器一样,在MATLAB中数学式的计算是直截了当的。但要了解这个大型计算器的使用方法并合理使用它,就先要了解一些MATLAB的基础知识。本章是整个MATLAB学习的基础,主要内容包括MATLAB软件平台上的各种数据类型、矩阵的基本操作、运算符及字符串处理函数等。

学习要求

ac7c39cc0de6eadd423c80f82a114bd9_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


2.1  数据类型(1)


MATLAB中的数据类型主要包括数值类型、逻辑类型、字符串、函数句柄、结构体和单元数组类型。这6种基本的数据类型都是按照数组形式存储和操作的。

MATLAB中还有两种用于高级交叉编程的数据类型,分别是用户自定义的面向对象的用户类类型和Java类类型。


2.1.1  数值类型


基本的数值类型主要有整数、单精度浮点数和双精度浮点数,如表2-1所示。

2-1 数值类型数据的分类

f7b5089781eb1b499ea2aada3ee1ed69_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

MATLAB中数值类型的数据包括有符号和无符号整数、单精度浮点数和双精度浮点数。在未加说明与特殊定义时,MATLAB对所有数值按照双精度浮点数类型进行存储和操作。

在需要时,可以指定系统按照整数类型或单精度浮点数类型对指定的数字或数组进行存储、运算等操作。相对于双精度浮点数类型,整数类型与单精度浮点数类型的优点在于节省变量占用的内存空间,当然要在满足精度要求的前提下。

提示:MATLAB会自动进行记忆体的使用和回收,而不像C语言,必须由使用者一一指定。这些功能使得MATLAB易学易用,使用者可专心致力于撰写程序。


1.整数类型


MATLAB中提供了8种内置的整数类型,这8种整数类型的存储占用位数、能表示的数值范围和转换函数均不相同,如表2-2所示。

不同的整数类型所占用的位数不同,因此能够表示的数值范围也不同。在实际应用中,应根据实际需要合理选择合适的整数类型。

由于MATLAB中数值的默认存储类型是双精度浮点数类型,因此将变量设置为整数类型时,需要使用相应的转换函数,将双精度浮点数转换为指定的整数类型。

2-2 MATLAB中的整数类型

整数类型

数值范围

转换格式

有符号8位整数

-27~27-1

int8

无符号8位整数

0~28-1

uint8

有符号16位整数

-215~215-1

int16

无符号16位整数

0~216-1

uint16

有符号32位整数

-231~231-1

int32

无符号32位整数

0~232-1

uint32

有符号64位整数

-263~263-1

int64

无符号64位整数

0~264-1

uint64


在转换过程中,MATLAB默认将待转换数值转换为与之最为接近的整数值,若小数部分为0.5,则转换后的结果为与该浮点数最接近的两个整数中绝对值较大的一个。

另外,这些转换函数也可以将其他数据类型转换为指定的数据类型。在不超出数值范围的情况下,任意两个整数类型之间也可以通过转换函数进行相互转换。同时,由于不同的整数类型能够表示的数值范围不同,因此当运算结果超出相应的整数类型能够表示的范围时,就会出现错误,运算结果被置为该整数类型能够表示的最大值或最小值。

MATLAB中还包含了几类不同运算法则的取整函数,也可以把浮点数转换成整数。这些取整函数及相应的转换方式如表2-3所示。

2-3  MATLAB中的取整函数

函数

运算法则

示例

floor(x)

向下取整

floor(1.2)=1

floor(2.5)=2

floor(-2.5)=-3

ceil(x)

向上取整

ceil(1.2)=2

ceil(2.5)=3

ceil(-2.5)=-2

round(x)

取最接近的整数

如果小数部分是0.5,则向绝对值大的方向取整

round(1.2)=1

round(2.5)=3

round(-2.5)=-3

fix(x)

0取整

fix(1.2)=1

fix(2.5)=2

fix(-2.5)=-2


2.浮点数类型


MATLAB中提供了单精度浮点数类型和双精度浮点数类型,其存储位宽、能够表示的数值范围、数值精度各方面均不相同,具体如表2-4所示。

由表2-4可知,单精度浮点数类型的占用位数少,因此占用内存小,但能够表示的数值范围和数值的精度都比双精度浮点数类型小。

由于MATLAB中的默认数值类型为双精度浮点数类型,因此与创建整数类型数值一样,也可以通过转换函数来实现创建单精度浮点数类型。

2-4  MATLAB中的浮点数类型

浮点数类型

存储位宽

各数位的意义

数值范围

转换函数

单精度

32

0~22位表示小数部分

23~30位表示指数部分

31位表示符号(01负)

-3.40282e+038~-1.17549e-038

1.17549e-038~3.40282e+038

single

双精度

64

0~51位表示小数部分

52~62位表示指数部分

63位表示符号(01负)

-1.79769e+308~-2.22507e-308

2.22507e-308~1.79769e+308

double

双精度浮点数在参与运算时,返回值的类型依赖于参与运算的其他数据类型。当参与运算的其他数据为逻辑类型、字符类型时,返回结果为双精度浮点数类型;当参与运算的其他数据为整数类型时,返回结果为相应的整数类型;当参与运算的其他数据为单精度浮点数类型时,返回结果为相应的单精度浮点数类型。

提示:在MATLAB中,单精度浮点数类型不能与整数类型进行算术运算。

2-1:浮点数参与的运算。

在命令行窗口中输入:

a = uint32(120);
b = single(22.809);
c = 73.21;
ab = a * b

输出结果:

错误使用  *
整数只能与同类的整数或双精度标量值组合使用。

在命令行窗口中输入:

ac = a * c

输出结果:

ac =
  uint32
   8785

在命令行窗口中输入:

bc = b * c

输出结果:

bc =
  single
  1.6698e+03

在命令行窗口中输入:

str = ‘hello’

输出结果:

str =
    'hello'

在命令行窗口中输入:

newstr = str – 44.3

输出结果:

newstr =
   59.7000   56.7000   63.7000   63.7000   66.7000

在命令行窗口中输入:

whos

输出结果:

Name        Size            Bytes  Class     Attributes
  a           1x1                 4  uint32             
  ac          1x1                 4  uint32             
  b           1x1                 4  single             
  bc          1x1                 4  single             
  c           1x1                 8  double             
  newstr      1x5                40  double             
  str         1x5                10  char


由于浮点数只占用一定的存储位宽,其中只有有限位分别用来存储指数部分和小数部分,因此,浮点数类型能够表示的实际数值是有限且离散的,任何两个最近相邻的浮点数之间都有微小间隙,而处在间隙中的数值只能用这两个相邻的浮点数之中的一个来表示。MATLAB中提供了eps函数,可以获取一个数值和最接近该数值的浮点数之间的间隙。


2-2:浮点数的精度。

在命令行窗口中输入:

format long
eps(3)

输出结果:

ans =
     4.440892098500626e-16

在命令行窗口中输入:

eps(single(3))

输出结果:

ans =
  single
   2.3841858e-07


3.复数


复数包括实部和虚部两部分。MATLAB中默认使用字符ij作为虚部标志。在创建复数时,可以直接按照复数形式进行输入或者使用complex函数。MATLAB库函数中关于复数的相关函数如表2-5所示。

2-5  MATLAB库函数中关于复数的相关函数

说明
real(z) 返回复数z的实部
abs(z) 返回复数z的模
conj(z) 返回复数z的共轭复数
imag(z) 返回复数z的虚部
angle(z) 返回复数z的辐角
complex(a,b) a为实部、b为虚部创建复数

4.无穷量(Inf)和非数值量(NaN


MATLAB中使用Inf-Inf分别代表正无穷量和负无穷量,NaN表示非数值量。正负无穷量的产生一般是由于运算溢出,产生了超出双精度浮点数数值范围的结果;非数值量则是由于0/0Inf/Inf类型的非正常运算而产生的,这两个NaN彼此是不相等的。

除了异常运算结果,MATLAB还提供了特定函数InfNaN来创建指定数值类型的无穷量和非数值量,生成结果默认为双精度浮点数类型。还有一种特殊的指数类型的数据叫作非数,通常表示运算得到的数值结果超出了运算范围。非数的实部用NaN表示,虚部用InF表示。

2-3:无穷量及非数值量的产生和性质。

在命令行窗口中输入:

a = 0 / 0, b = log(0), c = inf - inf

输出结果:

a =
   NaN
b =
  -Inf
c =
   NaN


2.1.2  逻辑类型


逻辑类型的数据是指布尔类型的数据及数据之间的逻辑关系。除了传统的数学运算,MATLAB还支持关系和逻辑运算。这些运算的目的是提供求解真/假命题的答案。

作为所有关系和逻辑表达式的输入,MATLAB把任何非零数值当作真,把零当作假。所有关系和逻辑表达式的输出:对于真,输出为1;对于假,输出为0

逻辑类型数据在进行运算时需要用到关系操作符和逻辑运算符。

MATLAB中的关系操作符如表2-6所示。

2-6 MATLAB中的关系操作符

关系操作符

说明

小于

<=

小于或等于

大于

>=

大于或等于

==

等于

~=

不等于


MATLAB中的关系操作符能用来比较两个同样大小的数组,或用来比较一个数组和一个标量。在后一种情况中,标量和数组中的每一个元素相比较,结果与数组大小一样。


2-4:判断两个数组中的元素是否相等。

在命令行窗口中输入:

A = 1 : 9, B = 10 - A

输出结果:

A =
     1     2     3     4     5     6     7     8     9
B =
     9     8     7     6     5     4     3     2     1

在命令行窗口中输入:

TrueorFalse = (A == B)     %判断A与B中的元素是否相等

输出结果:

TrueorFalse =
  1×9 logical 数组
   0   0   0   0   1   0   0   0   0


提示:“=”“==”MATLAB中的意义是不同的。“==”是对等号两边的两个变量进行比较,当它们相等时返回1,不相等时返回0;而“=”则被用来将运算的结果赋给一个变量。

逻辑运算符提供了一种组合或否定关系表达式,如表2-7所示。

2-7 MATLAB中的逻辑运算符

逻辑运算符

说明

&

|

~


2-5:判断两个数组中的元素是否相等。

在命令行窗口中输入:

A = 1 : 9;
TrueorFalse = ( A > 2 ) & ( A < 6)      %判断A中元素是否在2~6之间

输出结果:

TrueorFalse =
  1×9 logical 数组
   0   0   1   1   1   0   0   0   0

除了上述关系操作符与逻辑运算符,MATLAB还提供了大量其他关系与逻辑函数。

1xor(x,y)指令的功能为异或运算,xy同为零(假)或非零(真)时返回0,否则返回1

2any(x)指令的功能为判断是否为零向量或零矩阵(向量或矩阵中的元素全部为零),如果是非零向量或非零矩阵,则返回1,否则返回0

除此之外,MATLAB还提供了大量的函数,在运算过程中用来测试特殊值或条件是否存在,并返回相应的表示结果的逻辑值,如表2-8所示。

2-8  测试函数

函数名称

函数功能

finite

元素有限,返回空值

isempty

参量为空,返回真值

isglobal

参量是一个全局变量,返回真值

ishold

当前绘图保持状态是“ON”,返回真值

isieee

计算机执行IEEE算术运算,返回真值

isinf

元素无穷大,返回真值

isletter

元素为字母,返回真值

isnan

元素为不定值,返回真值

isreal

参量无虚部,返回真值

isspace

元素为空格字符,返回真值

isstr

参量为一个字符串,返回真值

isstudent

MATLAB为学生版,返回真值

isunix

计算机为UNIX系统,返回真值


2.1.3  字符和字符串


MATLAB中,文本当作特征字符串或简单地当作字符串。字符串能够显示在屏幕上,也可以用来构成一些命令,这些命令在其他的命令中用于求值或者被执行。

MATLAB中可能会遇到对字符和字符串的操作。一个字符串是存储在一个行向量中的文本,这个行向量中的每一个元素代表一个字符。实际上,元素中存放的是字符的内部代码,即ASCII码。

当在屏幕上显示字符变量的值时,显示出来的是文本,而不是ASCII数字。由于字符串是以向量的形式来存储的,因此可以通过它的下标对字符串中的任何一个元素进行访问。字符矩阵也可以通过下标索引进行访问,但是矩阵的每行字符数必须相同。

字符串一般是ASCII值的数值数组,它作为字符串表达式进行显示。


2-6:字符串属性示例。

在命令行窗口中输入:

String = 'Every good boy does fun.';
size(String)

输出结果:

ans =
     1    24

在命令行窗口中输入:

whos

输出结果:

Name        Size            Bytes  Class     Attributes
  String      1x24               48  char               
  ans         1x2                16  double


一个字符串是由单引号括起来的简单文本。在字符串中的每个字符是数组中的一个元素,字符串的存储要求每个字符8字节,如同MATLAB的其他变量。

因为ASCII字符只要求1字节,故这种存储要求是浪费的,7/8所分配的存储空间无用。然而,对字符串保持同样的数据结构可以简化MATLAB的内部数据结构。所给出的字符串操作并不是MATLAB的基本特点,但这种表达是方便和可接受的。

为了了解下面字符串的ASCII表达,只需对字符串执行一些算术运算。最简单和计算上最有效的方法是取数组的绝对值。


2-7:字符串的ASCII表达。

在命令行窗口中输入:

String = 'Every good boy does fun.';
U = abs(String)

输出结果:

U =
  列 1 至 13
    69   118   101   114   121    32   103   111   111   100    32    98   111
  列 14 至 24
   121    32   100   111   101   115    32   102   117   110    46

在命令行窗口中输入:

U = U + 0

输出结果:

U =
  列 1 至 13
    69   118   101   114   121    32   103   111   111   100    32    98   111
  列 14 至 24
   121    32   100   111   101   115    32   102   117   110    46


在上例中,加零到字符串并没有改变它的ASCII表达。

因为字符串是数值数组,所以它们可以用MATLAB中所有可利用的数组操作工具进行操作。


2-8:字符串数组的索引示例。

在命令行窗口中输入:

String = 'Every good boy does fun.';
U = String(7:10)

输出结果:

U =
    'good'

在命令行窗口中输入:

U = String(10:-1:7)

输出结果:

U =
    'doog'

在上例中,字符串像数组一样进行编址。这里元素710包含单词good

字符串中的单引号是由两个连续的单引号来表示的。


2-9:字符串中的单引号。

在命令行窗口中输入:

String = 'It''s not the manual!'

输出结果:

String =
    'It's not the manual!'

字符串的连接可以通过直接将字符串数组连接来实现。


2-10:字符串的连接。

在命令行窗口中输入:

U = 'Hello,';
V = ' world!';
W = [U, V]

输出结果:

W =
    'Hello, world!'

相关文章
|
2月前
|
存储 数据处理 索引
MATLAB中的基本数据类型与变量操作
【10月更文挑战第1天】 MATLAB 是一种广泛应用于数学计算和科学研究的编程语言,其核心是矩阵运算。本文详细介绍了 MATLAB 中的基本数据类型,包括数值类型(如 `double` 和 `int`)、字符数组、逻辑类型、结构体、单元数组和函数句柄,并通过代码示例展示了变量操作方法。
158 0
|
6月前
|
机器学习/深度学习 存储 移动开发
MATLAB数据类型和运算符+矩阵创建
MATLAB数据类型和运算符+矩阵创建
65 1
|
6月前
|
机器学习/深度学习 数据可视化 算法
探索MATLAB世界:掌握基础知识与实用技能(1. MATLAB环境与基本操作 2. 数据类型与变量 3. 条件与循环,1. 数据分析与统计 2. 图像处理与计算机视觉 3. 信号处理与控制系统)
探索MATLAB世界:掌握基础知识与实用技能(1. MATLAB环境与基本操作 2. 数据类型与变量 3. 条件与循环,1. 数据分析与统计 2. 图像处理与计算机视觉 3. 信号处理与控制系统)
57 0
|
7月前
|
数据安全/隐私保护
加速度、速度、位移互相转换,加速度转位移matlab程序,任意数据类型
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
7月前
|
存储 容器
第一章:MATLAB基础教程:变量和数据类型
第一章:MATLAB基础教程:变量和数据类型
70 0
专题一MATLAB基础知识——1.7字符串处理
专题一MATLAB基础知识——1.7字符串处理
103 1
专题一MATLAB基础知识——汇总
专题一MATLAB基础知识——汇总
46 0
专题一MATLAB基础知识——1.6MATLAB基本运算
专题一MATLAB基础知识——1.6MATLAB基本运算
77 0
|
存储 人工智能 NoSQL
专题一MATLAB基础知识——1.5矩阵元素的引用
专题一MATLAB基础知识——1.5矩阵元素的引用
281 0
专题一MATLAB基础知识——1.4矩阵表示
专题一MATLAB基础知识——1.4矩阵表示
129 0