Matlab学习入门篇(二)—— 数据类型

文章目录

  • 一、数值型
    • 1.整数类型
      • 1.1 MATLAB中的整数类型
      • 1.2 取整函数
    • 2.浮点数类型
  • 二、逻辑型
    • 1.直接赋值
    • 2.根据表达式创建
    • 3.函数转化(logical)
    • 4.运算符的优先级
  • 三、结构数组
    • 1.结构数组的创建
      • 1.1使用直接赋值法创建结构数组
      • 1.2 使用struct函数创建结构数组
      • 1.3 结构数组的访问
      • 1.4 结构数组域的增加
      • 1.5 结构数组域的删除
      • 1.6 数值运算操作和函数在结构数组中的应用

Matlab提供了多种数据类型,包括数值类型、逻辑类型、字符串、函数句柄、结构数组和单元数组类型等,且在matlab中任何一种数据类型都以矩阵或者是数组形式来表示。注:这里的矩阵或是数组,是指最小的0x0或N维任何大小的矩阵或者数组。

一、数值型

基本的数值类型主要有整数、单精度浮点数和双精度浮点数三种类型。默认情况下,Matlab在存储数据时使用的双精度浮点数,用户不可以更改默认的数据类型和精度,但是可以选择用非默认的整数或者单精度浮点数来存储来存储矩阵或者数组。

1.整数类型

1.1 MATLAB中的整数类型

整型类别 取值范围 函数
有符号的8位整数 -2的7次方至2^7 -1 int8
有符号的16位整数 -2的15次方至2^15 -1 int16
有符号的32位整数 -2的31次方至2^31 -1 int32
有符号的64位整数 -2的63次方至2^63 -1 int64
无符号的8位整数 0到2^8 -1 uint8
无符号的16位整数 0至2^16 -1 uint16
无符号的32位整数 0至2^32 -1 uint32
无符号的64位整数 0到2^64 -1 uint64

在实际应用中,应根据实际需求合理选择合适的整数类型。由于MATLAB中数值的默认存储类型是双精度浮点数,因此将变量设置为整数类型时,需要使用相应的转换函数,将双精度浮点数装换为指定的整数类型。
在转换过程中,MATLAB默认将待转换数值转换为与之最接近的整数值。例如:

>> a = 2.4
a =
    2.4000
>> b = int8(a)
b =
  int8
   2

1.2 取整函数

函数 运算法则 备注
floor(x) 向下取整 不大于其最大的整数
ceil(x) 向上取整 右取整
round(x) 去最接近的整数,如果小数部分是0.5,则向绝对值大的方向取整 正数四舍五入,负数四舍五入后填负号
fix(x) 向0取整 距离0最近的整数

2.浮点数类型

单精度浮点型:single
双精度浮点型:double
单精度数组比双精度数组更能节省更多的内存空间,灵活运行可以更高效的利用内存。

二、逻辑型

逻辑数据类型,即仅有具有“true”和“false”两个数值的一种数据类型。true用1表示、false用0表示,在逻辑运算中,Matlab将所有的非零值作为逻辑true来进行计算,而将零值作为逻辑false来进行计算。
逻辑型数据一般可以通过直接赋值根据表达式创建以及函数转化三种方式生成。

1.直接赋值

此方法是将true和false值直接赋值给变量。例如将true赋给a,false赋给b,最后通过whos查看变量的赋值情况。

>> a = true

a =

  logical

   1

>> b = false

b =

  logical

   0

>> whos
  Name      Size            Bytes  Class      Attributes

  a         1x1                 1  logical              
  b         1x1                 1  logical              

2.根据表达式创建

Matlab逻辑运算符或函数将会返回逻辑型的true或者false。以下是常见的运算符和函数及对应的说明。

运算符或函数 说明
&& 具有短路作用的“与”操作,仅能处理标量
|| 具有短路作用的“或”操作,仅能处理标量
== 关系运算符,等于
~= 关系运算符,不等于
< 关系运算符,小于
> 关系运算符,大于
& 元素“与”操作
<= 关系运算符,小于等于
>= 关系运算符,大于等于
any 当向量中的元素有非零元素时,返回true(也就是1)
all 当向量中的元素都是非零元素时,返回true
xor 逻辑“异或”操作
所有以is开头的函数 判断操作

例如:将表达式1>0的值赋给变量c,表达式1>5的值赋给变量d

>> c = 1 > 0

c =

  logical

   1

>> d = 1 > 5

d =

  logical

   0

3.函数转化(logical)

函数的转化使用的是logical函数,可将任意类型的的数组转换为逻辑型。其中非零元素为true,零元素为false。

>> e = logical(6)

e =

  logical

   1

>> f = logical(0)

f =

  logical

   0

4.运算符的优先级

在遇到表达式中有较多运算符的时候,需要严格遵守以下的运算符计算优先级。
以下将matlab语言的优先级和计算优先级,按照从高到低的顺序进行排序。

  1. 括号()
  2. 数组的转置、数组幂、复转置、矩阵幂
  3. 代数正(+)、代数负(-)、逻辑非(~)
  4. 数组乘法(.*)、数组除法(./)、矩阵乘法(*)、矩阵除法(/)、矩阵左除(\)
  5. 加法(+)、减法(-)
  6. 冒号运算符(:)
  7. 小于(<)、小于等于(<=)、大于(>)、大于等于(>=)、等于(==)、不等于(~=)
  8. 元素“与”(&)
  9. 元素“或”(|)
  10. 短路逻辑“与”(&&)
  11. 短路逻辑“或”(||)

三、结构数组

结构是Matlab提供的一种将选择的数据存储到一个实体中的数据类型。结构可以由数据容器组成,容器叫做域,每个域中可以存储Matlab支持的数据类型。结构数组可以具有任何大小且是很重要的混合数据类型存储手段。

1.结构数组的创建

1.1使用直接赋值法创建结构数组

teacher就是以结构类型存储的数据,包含了4个元素。

>> teacher.name="Tom"
teacher.sex="male"
teacher.age=40
teacher.number=15689
teacher = 

  包含以下字段的 struct:

      name: "Tom"
       sex: "male"
       age: 40
    number: 15689

在变量区可以清晰的看到teacher结构数组包含的4个元素以及对应的值

Matlab学习入门篇(二)—— 数据类型_第1张图片

1.2 使用struct函数创建结构数组

struct函数可以根据指定的域及其相应的值创建结构体数组
这是基本的语法格式:

structure_array = struct('field1',{var1} 'field2', {var2}, ...)
structure_array = struct('field1', var1, 'field2', val2, ...)

利用以上语法格式创建一个student结构数组,输入完后直接按下Enter键,显示student的具体内容:

>> student=struct('name','henry','age',26,'grade',uint16(1))

student = 

  包含以下字段的 struct:

     name: 'henry'
      age: 26
    grade: 1

>> whos
  Name         Size            Bytes  Class     Attributes

  student      1x1               524  struct  

同样的,在变量区显示出具体的变量名称及其对应的值

Matlab学习入门篇(二)—— 数据类型_第2张图片

1.3 结构数组的访问

语法格式:structName.fileName(fRows,fCols,...)
紧接着上例中的student结构,访问其内部的元素


>> student.name

ans =

    'henry'

>> student.age

ans =

    26

>> student.grade

ans =

  uint16

   1

1.4 结构数组域的增加

增加结构数组域最常用的方法就是对其直接赋值,且增添子域的操作只会影响被操作的具体结构,而不影响整个结构数组。例如给student结构再添加一个元素address并为其赋值。

>> student=struct('name','henry','age',26,'grade',uint16(1))

student = 

  包含以下字段的 struct:

     name: 'henry'
      age: 26
    grade: 1

>> student.address="Beijing"

student = 

  包含以下字段的 struct:

       name: 'henry'
        age: 26
      grade: 1
    address: "Beijing"

1.5 结构数组域的删除

结构数组的删除:需要使用rmfield函数,此时会得到一个新的结构数组。

>> student=struct('name','henry','age',26,'grade',uint16(2))

student = 

  包含以下字段的 struct:

     name: 'henry'
      age: 26
    grade: 2

>> student_array = rmfield(student,'age')

student_array = 

  包含以下字段的 struct:

     name: 'henry'
    grade: 2

1.6 数值运算操作和函数在结构数组中的应用

若结构数组域中的内容是数值型的一般矩阵,那么适用于一般矩阵的数值操作和函数也可以应用于结构数组。

>> A.a=magic(3)

A = 

  包含以下字段的 struct:

    a: [3×3 double]

>> A.a

ans =

     8     1     6
     3     5     7
     4     9     2

>> A.a.^2

ans =

    64     1    36
     9    25    49
    16    81     4

>> sqrt(A.a)

ans =

    2.8284    1.0000    2.4495
    1.7321    2.2361    2.6458
    2.0000    3.0000    1.4142

未完待续。。。

你可能感兴趣的:(科学计算,matlab,学习,开发语言)