MATLAB学习笔记第一篇:数据类型

简介

本文记录了在MATLAB学习过程中所需要认识和了解的基本数据类型。

1、数值类型

(1)整数类型:分为有符号int和无符号uint两种,位数有8、16、32、64。对于非整数类型的数值,可以通过转换函数进行相互转换,例如向下取整floor(x),向上取整ceil(x),最接近整数取整round(x),向0取整fix(x)。

(2)浮点数类型:分为单精度和双精度。单精度为32位宽;双精度为64位宽。双精度浮点数运算结果由其它参与运算的数据类型决定:逻辑型、字符型—双精度;整数型—整数类型;单精度浮点型—单精度浮点型。

(3)复数:实部real(z)、虚部image(z)、模abs(z)、复数幅角angle(z)、共轭复数conj(z)、以a为实部、b为虚部创建复数。

(4)无穷量和非数值量。

2、逻辑类型

(1)逻辑类型同C语言。

(2)逻辑类型运算不同于数值类型的运算。

3、字符和字符串

1
2
>>String = 'Every good boy does have fun.';
>>size(String)

代码结果:ans = 1 29。其中1是1行,29代表29列;在字符串中,空格也是占用一个字符位置。字符串是数值数组,可以用数组操作工具进行操作。

1
>>String = 'It''s not the manual'

代码结果:String = ‘It’s not the manual’。字符串中单引号可以用两个连续的单引号表示。

1
2
3
>> A='Hello,';
>> B='world.';
>> C=[A B]

代码结果:C= ‘Hello,world.’。字符串的连接可以用两个字符串数组连接。

4、函数句柄

在MATLAB中直接调用函数:直接采用和M文件同名的子函数或者在主文件中定义好的函数,需要严格按照函数名。

在MATLAB中间接调用函数:采用操作符@,将函数保存到一个变量中,无需严格按照函数名,按照变量名使用函数即可。

1
2
3
>> F_Handle=@cos;
>> x=0:2*pi;
>> F_Handle(x)

可以看到,这里采用了F_Handle函数调用了cos函数。

5、结构体类型

(1)通过字段赋值创建结构体。

(2)通过struct函数创建结构体。

语法:s=struct(‘field1’,‘data1’,‘field2’,‘data2’……)。其中s是结构体的名称,s(1)表示结构体每个字段对应的第一个值,s(2)表示结构体每个字段对应的第二个值……以此类推。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
>> Schedule=struct('Day',{'Monday','Tuesday','Wednesday'},'Time','15:00','Number',18);
>> Schedule(1)

ans =

包含以下字段的 struct:

Day: 'Monday'
Time: '15:00'
Number: 18

>> Schedule(2)

ans =

包含以下字段的 struct:

Day: 'Tuesday'
Time: '15:00'
Number: 18

>> Schedule(3)

ans =

包含以下字段的 struct:

Day: 'Wednesday'
Time: '15:00'
Number: 18

查看结构体的组成:

1
2
3
4
5
6
7
8
>> Schedule
Schedule =

包含以下字段的 1×3 struct 数组:

Day
Time
Number

6、数组类型

MATLAB运算所有的数据类型都是按照数组及矩阵的形式进行存储和运算的,在形式上和矩阵的表达形式较为相同,但是与矩阵运算所使用的线性代数的运算不同。

(1)赋值创建数组

1
2
3
4
5
>> A=[1 2 3 4 5 6]

A =

1 2 3 4 5 6

(2)使用“:”创建数组

句法格式:Array = i : j : k,其中i是创建数组的起始值;j是步长,表示相邻元素之间的间隔,当j=0时,数组按照步长j=1进行创建数组;k是创建数组的终值。

1
2
3
4
5
6
7
8
9
10
11
>> A=1:6

A =

1 2 3 4 5 6

>> A=1:2:6

A =

1 3 5

MATLAb中的linspace可以用于产生x1,x2之间的N点行线性的矢量,表达式为linspace(x1,x2,N),其中x1、x2、N分别为起始值、终止值、元素个数。若默认N,默认点数为100。

N=50:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>> A=linspace(1,100,50)

A =

113

1.0000 3.0204 5.0408 7.0612 9.0816 11.1020 13.1224 15.1429 17.1633 19.1837 21.2041 23.2245 25.2449

1426

27.2653 29.2857 31.3061 33.3265 35.3469 37.3673 39.3878 41.4082 43.4286 45.4490 47.4694 49.4898 51.5102

2739

53.5306 55.5510 57.5714 59.5918 61.6122 63.6327 65.6531 67.6735 69.6939 71.7143 73.7347 75.7551 77.7755

4050

79.7959 81.8163 83.8367 85.8571 87.8776 89.8980 91.9184 93.9388 95.9592 97.9796 100.0000

默认N:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
>> A=linspace(1,100)

A =

122

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

2344

23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44

4566

45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66

6788

67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88

89100

89 90 91 92 93 94 95 96 97 98 99 100

(3)创建空数组

1
2
3
4
5
>> A=[]

A =

[]

空数组主要应用于逻辑运算、数组声明、数组的清空等。

7、单元数组类型

单元数组包括许多类型的数据,组成单元数组的每一个元素称为一个单元,每个单元可由不同类型的数据构成。

(1)赋值创建单元数组

1
2
3
4
5
6
7
8
>> A={'x', [1,2,3];10, pi}

A =

2×2 cell 数组

{'x' } {1×3 double}
{[10]} {[ 3.1416]}

(2)利用cell函数创建单元数组

1
2
3
4
5
6
7
8
9
>> A=cell(3,3)

A =

3×3 cell 数组

{0×0 double} {0×0 double} {0×0 double}
{0×0 double} {0×0 double} {0×0 double}
{0×0 double} {0×0 double} {0×0 double}

(3)对单元数组进行寻访

(4)对单元数组进行操作

单元数组的操作包括合并、删除单元数组指定单元、改变单元数组的形状等。

8、map容器类型

map的本意是映射,就是将一个量映射到另一个量。例如将字符串映射为一个数值,这个字符串是map的键(key),被映射的数值就是map的数据(value)。