《MATLAB R2012a超级学习手册》一2.1 数据类型

2.1 数据类型

MATLAB R2012a超级学习手册
MATLAB中定义了很多种数据类型,包括整数、浮点数、字符、字符串和逻辑类型等,甚至可以定义自己的数据类型。

2.1.1 数值类型

在MATLAB中有15种基本数据类型。每种基本的数据类型均以矩阵的形式出现,该矩阵可以是最小的0×0矩阵到任意大小的n维矩阵。数组包括数值类型、字符类型、单元类型、结构类型、Java类型、函数句柄。

数值类型包含整数、浮点数和复数3种类型。另外,MATLAB还定义了inf和NaN两个特殊数值。

1.整数类型
在MATLAB中整数类型包含4种有符号整数和4种无符号整数。有符号整数可以用来表示负数、零和正整数,而无符号整数则只可以用来表示零和正整数。MATLAB支持1、2、4和8字节的有符号整数和无符号整数。

这8种数据类型的名称、表示方法和类型转换函数如表2-1所示。应用时要尽可能用字节数少的数据类型表示数据,这样可以节约存储空间和提高运算速度。例如最大值为100的数据可以用1个字节的整数来表示,而没有必要用8个字节的整数来表示。

表2-1中的类型转换函数可以用于把其他数据类型的数值强制转换为整数类型。此外类型转换函数还可以用于生成整数类型的数值。例如,如果需要产生一个无符号2字节整数的数值可以用如下语句实现。

>> x=uint16(36524)
x =
   36524

2.浮点数类型
MATLAB 2012浮点数有双精度浮点数和单精度浮点数两种。双精度浮点数为MATLAB 2012默认的数据类型。如果某个数据没有被指定数据类型,那么MATLAB会用双精度浮点数来存储它。为了得到其他类型的数值类型,可以使用类型转换函数。

MATLAB中的双精度浮点数和单精度浮点数均采用IEEE754中规定的格式来定义,其表示范围、存储大小和类型转换函数如表2-2所示。

3.复数类型
复数包含独立的两部分,即实部和虚部。虚部的单位是-1的开平方根,在MATLAB中可以用i或者j来表示。

可以用如下赋值语句来产生复数。

>>a=2+4i

也可以用函数complex来产生复数,示例代码如下。

>>x=2
>>y=4
>>z=complex(x,y)

其中x、y为实数,得到的z是以x为实部,y为虚部的复数。

也可以这样使用complex函数,具体代码如下。

>>x=2
>>z=complex(x)

其中x为实数,得到的z是以x为实部,以0为虚部的复数。

4.inf和NaN
MATLAB中规定用inf、-inf来表示正无穷大和负无穷大。除法运算中除数为0或者运算结果溢出都会导致inf或-inf的结果。以下3条语句运算产生的结果均为inf,具体代码如下。

>>10/0
>>x=exp(5000)
>>x=log(0)

MATLAB中规定用NaN来表示一个既不是实数也不是复数的数值。NaN是NotaNumber的缩写。类似0/0、inf/inf这样的表达式得到的结果均为NaN。

2.1.2 逻辑类型

逻辑类型用1和0来表示true和false两种状态。可以用函数logical()来得到逻辑类型的数值。函数logical()可以把任何非零的数值转换为逻辑true(即1),把数值0转换为逻辑false(即0)。示例代码如下。

>>logical(1)
ans=1
>>logical(0)
ans=0
>>logical(-100)
ans=1

在后面的小节中将介绍的逻辑关系运算符也可以得到逻辑类型的数据。

2.1.3 字符和字符串

MATLAB中规定用数据类型char来表示一个字符。一个char类型的1×n数组则可以称为字符串string。MATLAB中char类型都是以2字节的unicode字符来存储的。

可以用一对单引号来表示字符串,例如下面的代码。

>>str='Youaremyfriend';

也可以用char函数来构造一个字符串,例如下面的代码。

>>str=char('[3031]');

关于字符串的更深入的介绍请参考本书后面的小节。

2.1.4 结构体类型

结构体是根据属性名组织起来的不同类型数据的集合。有一种容易与结构体类型混淆的数据类型是单元数组类型。它是一种特殊类型的MATLAB数组,其每一个元素叫做单元,而每一个单元包含MATLAB数组。

提示:
结构体和单元数组的共同之处在于它们都提供了一种分级存储机制来存储不同类型的数据,不同之处是组织数据的方式不一样。结构体数组里的数据是通过属性名来引用的,而在单元数组里,数据是通过单元数组下标引用来操作的。
结构体数组是一种由“数据容器”组成的MATLAB 2012数组。这种“数据容器”称为结构体的属性(field)。结构体的任何一个属性可以包含任何一种类型的数据。

一个结构体Human,有3个属性,即Name、Score和Salary,其中Name是一个字符串,Score是一个标量,Salary是一个1×6的向量。例如:'Sara'属于Name字符串,100属于Score标量,[1 2 3 4 5 6]是Salary一个1×6的向量。

1.结构体数组的构造
构造一个结构体数组有如下两种方法。

(1)利用赋值语句。

(2)利用函数struct()来进行定义。

下面就通过为结构体中的每一个属性赋值来构造一个结构体数组。示例代码如下。

>>Human.Name='Sara';
>>Human.Score=100;
>>Human.Salary=[123456];
>>Human

上述语句得到的输出代码如下。

Human=
   Name:'Sara'
   Score:100
   Salary:[123456]

还可以用如下语句把结构体数组扩展成1×2的结构体,代码设置如下。

>>Human(2).Name='Tina';
>>Human(2).Score=99;
>>Human(2).Salary=[78];

由上述语句使结构体数组Human的维数变为1×2。当读者扩展结构体数组时,MATLAB对未指定数据的属性自动赋值成空矩阵,使其满足以下规则。

(1)数组中的每个结构体都具有同样多的属性名。

(2)数组中的每个结构体都具有相同的属性名。

例如,下面语句使结构体数组Human的维数变为1×3,此时Human(3).Name和Human(3).Salary由于未指定数据,被MATLAB 2012设为空矩阵。

Human(3).Score=94.5;

注意:
结构体数组中元素属性的大小并不要求一致,例如结构数组Human中的Name属性和Salary属性都具有不同的长度。
除了使用赋值语句来构造结构数组外,还可以用函数struct()来实现构造结构数组。函数struct的基本调用格式如下。

>>strArray=struct('field1',val1,'field2',val2,...);

上面语句中的输入变量为属性名和相应的属性值。

函数struct()可以有不同的调用方法来实现构造结构体矩阵,例如要实现一个1×3的结构数组Human的方法如表2-3所示。

2.访问结构体数组的数据
使用结构体数组的下标引用,可以访问结构体数组任何元素及其属性。同样也可以给任何元素及其属性赋值。还可以通过下面语句来生成一个结构体数组。

>>Human=struct('Name',{'Sara','Tina','Tom'},'Score',{100,99,[]},'Salary',{[123456],[78],[]})
Human =
   1x3 struct array with fields:
   Name
   Score
   Salary

读者可以访问结构数组的任意子数组。例如,下面的命令行生成一个1×2的结构数组。

>>NewHuman=Human(1:2);

上述语句得到输出代码如下。

Newhuman=
   1x2structarraywithfields:
   Name
   Score
   Salary

读者也可以通过如下命令行生成一个1×3的结构数组。

>>NewHuman=Human(1:3);

上述语句得到输出代码如下。

Newhuman=
   1x3structarraywithfields:
   Name
   Score
   Salary

如果要访问结构体数组的某个元素的某个属性,可以用如下格式。

>>Human(2).Score

上述语句得到输出代码如下。

ans=
   99

如果要访问结构体数组的某个元素的某个属性的元素值,可以使用如下格式。

>>Human(1).Salary(3)

上述语句得到的输出代码如下。

ans=
   3

如果想得到结构体数组的所有元素的某个属性值,可以使用如下格式。

>>Human.Name

上述语句得到输出代码如下。

ans=
   Sara
ans=
   Tina
ans=
   Tom

以上结果表明Human.Name格式的输入将返回结构体数组的所有元素的属性值。可以使用矩阵合并符[]来合并这些结果,程序语句如下。

>>Salary=[Human.Salary]

上述语句得到输出代码如下。

Salary=
   12345678

也可以用把它们合并在一个单元数组里,代码设置如下。

>>Salary={Human.Salary}

上述语句得到输出代码如下。

Salary=
   [1x6double][1x2double][]

2.1.5 单元数组类型

单元数组就是每个元素为一个单元的数组。每个单元都可以包含任意数据类型的MATLAB数组。例如,单元数组的一个单元可以是一个实数矩阵,或是一个字符串数组,也可以是一个复向量数组。

1.单元数组的构造
构造单元数组有左标志法和右标志法两种方法。下面就详细介绍这两种方法。

(1)左标志法

左标志法就是把单元标志{}放在左边,例如,创建一个2×2的单元数组可以使用如下语句。

>>c{1,1}='Butterfly';
>>c{1,2}=@cos;
>>c{2,1}=eye(1,2);
>>c{2,2}=false;

(2)右标志法

右标志法就是把标志符放在右边,例如,创建和上面一样的单元数组可以使用如下语句。

>>c(1,1)={'Butterfly'};
>>c(1,2)={@cos};
>>c(2,1)=eye(1,2);
>>c(2,2)={false};

上述语句还可以简单地写为下面的代码。

>>c={'Butterfly',@cos;eye(1,2),false};

要显示单元数组可以在命令行中直接输入单元数组的名字,代码设置如下。

>>c

由上述语句得到输出代码如下。

c=
   'Butterfly'@cos
   [1x2double][0]

另一种显示单元数组的方法是使用函数celldisp(),代码如下。

>>celldisp(c)

由上述语句得到的输出代码如下。

c{1,1}=
   Butterfly
c{2,1}=
   10
c{1,2}=
   @cos
c{2,2}=
   0

注意:
函数celldisp()的显示格式与直接输入单元数组名的显示格式是不同的。celldisp()函数更适用于具有大量数据的单元数组的显示。
2.单元数组的读取
以程序c={'Butterfly',@cos;eye(1,2),false}为例。要读取c{1,1}中的字符串,可以使用如下语句。

>>Str=c{1,1}

由上述语句得到输出代码如下。

Str=
   Butterfly

如果要读取单元数组的若干个单元的数据,例如读取单元数组c的第1行,可以用下面语句。

>>c(1,:)

上述语句得到输出代码如下。

ans=
   'Butterfly'@cos

3.单元数组的删除
将空矩阵赋给单元数组的某一整行或者某一整列,就可以删除单元数组的这一行或者一列。例如,删除单元数组c的第一行可以用如下语句。

>>c(1,:)=[]

上述语句得到输出代码如下。

c=
   [1x2double][0]

2.1.6 函数句柄
函数句柄是MATLAB中用来提供间接调用函数的数据类型。函数句柄可以转递给其他函数以便该函数句柄所代表的函数可以被调用。函数句柄还可以被存储起来,以便以后利用。

函数句柄可以用符号@后面跟着函数名来表示,例如下面的代码。

>>fhandle=@sin;

sin为MATLAB中自带的正弦函数,得到的输出变量fhandle为sin函数的句柄。可以利用fhandle来调用sin函数,例如下面的代码。

>>fhandle(0)

上面语句得到的输出代码如下。

ans=0

实际上,该程序中的语句fhandle(0)相当于语句sin(0)。

时间: 2024-10-13 23:27:33

《MATLAB R2012a超级学习手册》一2.1 数据类型的相关文章

《MATLAB R2012a超级学习手册》一1.1 MATLAB介绍

1.1 MATLAB介绍 MATLAB R2012a超级学习手册 MATLAB是一种高效的工程计算语言,它将计算.可视化和编程等功能集于一个易于使用的环境. 1.1.1 MATLAB的产品构架 MATLAB将高性能的数值计算和可视化集成在一起,并提供了大量的内置函数,从而被广泛地应用于科学计算.控制系统.信息处理等领域的分析.仿真和设计工作,而且利用MATLAB产品的开放式结构,可以非常容易地对MATLAB的功能进行扩充,从而在不断深化对问题认识的同时,不断完善MATLAB产品以提高产品自身的竞

《MATLAB R2012a超级学习手册》一导读

前言 MATLAB R2012a超级学习手册 MathWorks公司在1984年推出了一套高性能的数值计算和可视化软件--MATLAB.MATLAB全称"矩阵实验室"(Matrix Laboratory),是由著名的线性代数软件包LINPACK和特征值计算软件包EISPACK中的子程序为基础发展而成的一种开放式程序设计语言. MATLAB集数值计算.矩阵运算和可视化图形于一体,可方便地应用于算法开发.数据采集.数学建模.系统仿真.数据分析.科学和工程绘图.应用软件开发等方面.MATLA

《MATLAB R2012a超级学习手册》一2.3 运算符和特殊符号

2.3 运算符和特殊符号 MATLAB R2012a超级学习手册 MATLAB中提供了丰富的运算符,满足各种应用.这些运算符包括算数运算符.关系运算符和逻辑运算符3种运算符. 2.3.1 算数运算符 MATLAB的算数运算符的用法和功能如表2-12所示. 当A和B都是标量时,表示标量A的B次方幂.当A为方阵,B为正整数时,表示矩阵A的B次乘积.B为负整数时,表示矩阵A的逆的B次乘积.当B为非整数时,有如下表达式. 其中{A^{{\lambda _1}}}.L.{A^{{\lambda _n}}}

《MATLAB R2012a超级学习手册》一2.4 字符串处理函数

2.4 字符串处理函数 MATLAB R2012a超级学习手册MATLAB能够很好地支持字符串数据,可以用两个不同的方式来表示字符串,即字符数组和字符串单元数组. 2.4.1 字符串的构造 通常可以用m×n的字符数组来表示多个字符串,只要这些字符串的长度是一样.当需要保存多个不同长度的字符串时,可以用单元类型来实现. MATLAB提供了很多字符串操作,包括字符串的创建.合并.比较.查找以及与数值之间的转换.下面介绍如何创建字符串的操作. 1.创建字符数组可以用一对单引号来表示字符串,例如下面的示

《MATLAB R2012a超级学习手册》一1.6 使用MATLAB R2012a帮助系统

1.6 使用MATLAB R2012a帮助系统 MATLAB R2012a超级学习手册MATLAB提供了非常完善的帮助系统,下面介绍MATLAB中3种类型的帮助系统. 1.命令窗口查询帮助系统常见的帮助命令如表1-5所示. (1)Help命令:在命令窗口用于显示MATLAB函数的帮助.调用格式如下. Help //在命令窗口列出所有基本的帮助主题 help / //列出所有运算符和特殊字符 help functionname //在命令窗口列出functionname M文件的描述及语法 hel

《MATLAB R2012a超级学习手册》一1.2 MATLAB R2012a的安装、退出与卸载

1.2 MATLAB R2012a的安装.退出与卸载 MATLAB R2012a超级学习手册本节将向读者介绍MATLAB R2012a软件的安装.退出及卸载.读者通过以下操作即可成功装载上MATLAB软件. 1.2.1 MATLAB R2012a的安装 随着MATLAB版本的更新,安装也越来越简便.对于MATLAB R2012a,读者只要按照安装界面的提示逐步进行即可.下面介绍在Windows系统下的安装过程. (1)安装前的准备:准备好安装密码(PLP):退出正在运行的其他版本的MATLAB:

《MATLAB R2012a超级学习手册》一2.2 基本矩阵操作

2.2 基本矩阵操作 MATLAB R2012a超级学习手册MATLAB中最基本的数据结构是二维的矩阵.二维的矩阵可以方便地存储和访问大量数据.每个矩阵的单元可以是数值类型.逻辑类型.字符类型或者其他任何的MATLAB数据类型. 2.2.1 矩阵的构造 1.简单矩阵构造最简单的构造矩阵方法是采用矩阵构造符[],构造一行的矩阵可以把矩阵元素放在矩阵构造符[]中,并以空格或者逗号来隔开它们,其代码设置如下. row=[E1,E2,...,Em]或者row=[E1E2...Em] 如果矩阵是多行的,行

《MATLAB R2012a超级学习手册》一第1章 MATLAB概述

第1章 MATLAB概述 MATLAB R2012a超级学习手册MATLAB(Matrix Laboratory,矩阵实验室)是一种专业的计算机程序,用于工程科学的矩阵数学运算.但在最近的几年内,它逐渐发展为一种极其灵活的计算体系,用于解决各种重要的技术问题.MATLAB程序执行MATLAB语言,并提供了一个极其广泛的预定义函数库,使得技术工作变得简单高效. 本章主要结构安排是在第一节中简要介绍MATLAB软件所要实现的功能及特点,第二节介绍MATLAB R2012a软件的安装.退出及卸载,随后

《MATLAB R2012a超级学习手册》一1.8 本章小结

1.8 本章小结 MATLAB R2012a超级学习手册本章详细介绍了MATLAB的安装及使用,并且概要地介绍了MATLAB软件的发展及在各个领域的应用,最后还介绍了MATLAB数值计算的功能,希望读者学好MATLAB.用好MATLAB,不断地将科学计算与产品应用相结合. 接下来的章节作者将与广大读者一起同行,畅游MATLAB,帮助不同需求的读者尽快掌握MATLAB,并且能够顺利地通过MATLAB开发出新的产品或者是得到理想的科研成果.

《MATLAB R2012a超级学习手册》一2.5 本章小结

2.5 本章小结 MATLAB R2012a超级学习手册本章主要介绍了MATLAB软件的基础知识,包括数据类型.基体矩阵操作.运算符和特殊符号和字符串处理函数等.本章为独自编写用户程序和了解其他MATLAB基本程序作铺垫,因为每一个MATLAB程序都应让其他熟悉MATLAB编程的人容易理解.因此,有一个好的编程习惯十分重要. 说明:编写清晰.易理解.可维护强的程序要比编写简单的程序要难得多.一个程序员必须发展这方面的能力以做好自己的工作,还有程序必须避免一些常见的错误.