MATLAB中的数据类型

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


数值类型

        MATLAB中数值类型的数据包括有符号和无符号整数单精度浮点数双精度浮点数

        在未加说明与特殊定义时,MATLAB对所有数值按照双精度浮点数类型进行存储和操作。

        数值类型的转换,需要使用 相应的转换函数。

        1、整数类型

         取整函数

        MATLAB中还包含了几类不同运算法则的取整函数,也可以把浮点数转换成整数。

         2、浮点数类型

        双精度浮点数在参与运算时,返回值的类型依赖于参与运算的其他数据类型。

                当参与运算的其他数据为逻辑类型、字符类型时,返回结果为双精度浮点数类型;

                当参与运算的其他数据为整数类型时,返回结果为相应的整数类型;

                当参与运算的其他数据为单精度浮点数类型时,返回结果为相应的单精度浮点数类型。 

        单精度浮点数类型不能与整数类型进行算术运算。

        eps函数(浮点数的精度

        MATLAB中提供了eps函数,可以获取一个数值和最接近该数值的浮点数之间的间隙。

        基本用法:

>> eps            % 单独使用,默认为1.0
ans =
   2.2204e-16
>> eps(1)         % 参数为具体数值
ans =
   2.2204e-16
>> eps('double')  % 参数为数据类型
ans =
   2.2204e-16
>> eps('single')  % 参数为数据类型
ans =
  1.1921e-07
>> eps(0)         % 0的精度是最高的,也就是说eps(0)才是matlab所能表示的最小的正数。
ans =
  4.9407e-324

        复数

        复数包括实部和虚部两部分。MATLAB中默认使用字符i或j作为虚部标志。在创建复数时,可以直接按 照复数形式进行输入或者使用complex函数。

         无穷量(Inf)

        MATLAB中使用Inf和-Inf分别代表正无穷量和负无穷量。

        正负无穷量的产生一般是 由于运算溢出,产生了超出双精度浮点数数值范围的结果。

        非数值量(NaN)

        NaN表示非数值量。

        非数值量则是由于0/0或Inf/Inf类型的非正常运 算而产生的,这两个NaN彼此是不相等的。

        pi(圆周率)

        MATLAB中使用常量 pi 表示圆周率。

        realmax(最大的正实数)和 realmin(最小的正实数)

        MATLAB中使用 realmax 和 realmin 分别代表最大的正实数和最小的正实数。

        基本用法:

>> a=realmax                % 单独使用
a =
  1.7977e+308
>> a=realmax('double')      % 参数为数据类型 double
a =
  1.7977e+308
>> a=realmax('single')      % 参数为数据类型 single
a =
  3.4028e+38

        3、常用运算(数学)函数


逻辑类型

        MATLAB把任何非零数值当作真,把零当作假。

        所有关系和逻辑表达式的输出:对于真,输出为1;对于假,输出为0。

        1、关系操作符

 

        2、逻辑运算符

         3、常见的逻辑运算和函数

        数组或矩阵的比较

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

        基本用法:

& 数组的比较
>> a=[ 1 2 3 4 5 ]              % 生成数组a
a =
     1     2     3     4     5
>> b=[ 1 5 3 0 5 ]              % 生成数组b
b =
     1     5     3     0     5
>> a==b                         % 数组a和数组b比较,返回同样大小的数组,元素相等为1,不相等为0
ans =
     1     0     1     0     1
>> a==4                         % 数组a和数字4比较,返回同样大小的数组,元素相等为1,不相等为0
ans =
     0     0     0     1     0
% 矩阵的比较,类同数组
>> a=[1 2 3;4 5 6]
a =
     1     2     3
     4     5     6
>> b=[ 1 3 4;2 5 6]
b =
     1     3     4
     2     5     6
>> a==b
ans =

     1     0     0
     0     1     1
>> a==3
ans =
     0     0     1
     0     0     0

        xor(x,y)函数(异或运算)

        功能为异或运算,x和y同为零(假)或非零(真)时返回0,否则返回1。

        any(x)函数(判断零向量或零矩阵)

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

        用于判断的函数列表

        说明:下图中 Isempty 应为 isempty 。


字符和字符串

        一个字符串是由单引号括起来的简单文本。

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

        1、字符串的属性(size函数)

>> a='123456'        % a 为一个字符串
a =
123456
>> length=size(a)    % 求字符串的属性,返回一个数组
length =
     1     6
>> length(1)         % length(1) 表示字符串数组为1行
ans =
     1
>> length(2)         % length(2) 表示字符串数组的长度为6
ans =
     6
>> a=['abc';'edf']   % a 为一个字符串矩阵
a =
abc
edf
>> length=size(a)    % 求字符串的属性,返回一个数组,2表示矩阵有2行,3表示每行长度为3
length =
     2     3

        2、字符串的索引

        字符串像数组一样进行编址。

>> String='Every good boy does fun.';
>> U=String(7:10)         % 采用和数组下标一样的方式索引
U =
good
>> U=String(10:-1:7)      % 也可以从后向前索引
U =
doog

        3、字符串的连接

        单行字符串连接(strcat 函数)

         在构造单行字符串时,字符串内容依次写在 [ ] 内,使用空格或者 ,隔开。也可以使用strcat函数来实现。

>> U='Hello,';
>> V=' world!';
>> W=[U V]        % 字符串直接连接,或者写成W=[U,V]
W =
Hello, world!
>> w=strcat(U,V)  % 使用函数实现字符串连接
w =
Hello, world!

        多行字符串连接(strvcat函数和char函数)

        在构造单行字符串时,字符串内容依次写在 [ ] 或 { } 内,使用 ;隔开

       若字符串内容写在 [ ] 内,那么多行字符串的长度必须相同;若字符串内容写在 { } 内,则多行字符串的长度可以不同。

>> a='abc  ';
>> b='12345';
>> c='e fgh';
>> str=[a;b;c]   % [ ] 内使用 ;实现多行连接,每行字符串长度必须相同,否则出错 
str =
abc              % 此处abc后面还包含2个空格
12345
e fgh
>> a='abc';
>> b='12345';
>> c='e fgh';
>> str={a;b;c;}  % { } 内使用 ;实现多行连接,每行字符串长度可以不相同
str = 
    'abc'
    '12345'
    'e fgh'

        在使用strvcat函数连接多行字符串时,每行字符串的长度不要求相等,所有非最长字符串的右边会自动补偿空格,使得每行字符串的长度相同。

        char函数与strvcat函数类似,不过当多行字符串中有空字符串时,strvcat函数会自动进行忽略,而char函 数会把空字符串也用空格补偿后再进行连接

>> A='top';
>> B='';
>> C='Bottom';
>> str1=strvcat(A,B,C)  % top后面自动使用空格补齐,去掉空行
str1 =
top   
Bottom
>> str2=char(A,B,C)     % top后面自动使用空格补齐,空行保留
str2 =
top   
      
Bottom

        4、字符串比较函数

        通过关系运算符比较

        使用关系运算符进行比较时,会对字符串的每个字符进行比较,返回值是一个与字符串长度相同大小的数组,因此被比较的两个字符串的长度必须相同

>> A = 'Hello' == 'World'
A =
     0     0     0     1     0

        使用strcmp函数比较

>> A=strcmp('Hello','World')
A =
     0
>> B=strcmp('Hello','Hello')
B =
     1

        5、字符串查找和替换函数       

        查找与搜索(findstr函数 )

        findstr函数对字母的大小写是敏感的。另外,findstr函数对字符串矩阵不起作用,因此对字符串矩阵的搜索只能通过循环索引矩阵内的元素实现。

>> str='Peter Piper picked a peck of pickled peppers.';
>> find_str=findstr(str,' ')        % 查找单个字符,返回对应位置
find_str =
     6    12    19    21    26    29    37
>> find_str=findstr(str,' cow')     % 查找字符串,未找到返回空
find_str =
     []
>> find_str=findstr(str,' pick')    % 查找字符串,返回对应位置
find_str =
    12    29

        替换(直接赋值)

        直接赋值方法并不能使两个不同长度的字符串相互替换

>> str='Peter Piper picked a peck of pickled peppers.';
>> str(1:11)='Helen Smith'          % 给字符串内对应位置直接赋值
str =
Helen Smith picked a peck of pickled peppers.

        替换(strrep函数)

        strrep函数可以替换两个任意长度的字符串。与findstr函数类似, strrep函数也对字符串矩阵不起作用

>> str='Peter Piper picked a peck of pickled peppers.';
>> strrep(str,'Peter Piper','Sabrina Crame')   % 函数替换,内容可以不等长
ans =
Sabrina Crame picked a peck of pickled peppers.

        6、字符串处理函数

        说明:下图中的 Isstr 应为 isstr 。


函数句柄

        函数句柄提供了一种间接调用函数的方法。

        创建函数句柄需要用到操作符 @

        对MATLAB库函数中提供的各种M文件中的函数和使用者自主编写的程序中的内部函数,都可以创建函数句柄,从而可以通过函 数句柄来实现对这些函数的间接调用。

        在通过函数句柄调用函数时,也需要指定函数的输入参数。对于那些没有输入参数的函数,在使用句柄调用时,在句柄变量之后的圆括号中不填写变量名即可。

>> b=sin(pi)
b =
   1.2246e-16
>> fhandle=@sin          % 创建sin函数的句柄
fhandle = 
    @sin
>> a=fhandle(pi)         % 此时fhandle(pi)相当于sin(pi)
a =
   1.2246e-16

>> myadd = @(x,y) x+y^2  % 自定义函数并创建函数句柄
myadd = 
    @(x,y)x+y^2
>> m = myadd(2,4)        % 调用函数句柄并计算
m =
    18


结构体

        MATLAB中的结构体与C语言中的结构体类似,一个结构体可以通过字段存储多个不同类型的数据。 因此,结构体相当于一个数据容器,把多个相关联的不同类型的数据封装在一个结构体对象中。

        创建结构体对象的方法有两种,可以直接通过赋值语句给结构体的字段赋值,也可以使用结构体创建函数struct。

        1、通过字段赋值创建结构体

>> Student.Name='Sam';
>> Student.Grade=6;
>> Student.Subject={'Chinese','Math','English'};
>> Student
Student = 
       Name: 'Sam'
      Grade: 6
    Subject: {'Chinese'  'Math'  'English'}

        2、利用struct函数创建结构体

>> Date=struct('Day','Thursday','Time','15:00','Number',18)
Date = 
       Day: 'Thursday'
      Time: '15:00'
    Number: 18

        3、结构体操作函数

函数名说明
struct生成结构体变量
fieldname得到结构体变量的属性名
getfield得到结构体变量的属性值
setfield设定结构体变量的属性值
isfield判断是否为结构体变量的属性
isstruct判断是否为结构体变量
rmfield删除结构体变量中的属性


单元数组(元胞数组、Cell数组)

        单元(Cell)数组是一种无所不包的广义矩阵。组成单元数组的每一个元素称为一个单元。每一个单元可以包括一个任意数组,如数值数组、字符串数组、结构体数组或另外一个单元数组,因而每一个单元可 以具有不同的尺寸和内存占用空间。

        和一般的数值数组一样,单元数组的维数不受限制,可以是一维、二维或多维。

        MATLAB中使用单元数组的目的在于,它可以把不同类型的数据归并到一个数组中。

        1、使用赋值语句创建单元数组

        单元数组使用花括号“ { } ”来创建,使用逗号 “ , ” 或空格来分隔每一个单元,使用分号 “ ; ” 来分行。

>> c={'x',[1;2;3];10,pi}   % 分2行,每一行有2个单元(元素)
c = 
    'x'     [3x1 double]
    [10]    [    3.1416]

        2、利用cell函数创建空单元数组

>> a=cell(2,2)                % 创建一个2行2列的空单元数组
a = 
    []    []
    []    []
>> a{1,1}='Test';             % 为单元数组的第1个单元赋值
>> a{1,2}=[1,2,3];            % 为单元数组的第2个单元赋值
>> a{2,1}=10;                 % 为单元数组的第3个单元赋值
>> a{2,2}=[12,13;1,2];        % 为单元数组的第4个单元赋值
>> a
a = 
    'Test'    [1x3 double]
    [  10]    [2x2 double]

        3、单元数组的寻访

        在单元数组中,单元和单元中的内容是两个不同范畴的东西

        MATLAB为上述两种操作设计了相对应的操作对象:单元外标识(Cell Indexing)和单元内编址(Content Addressing)。

        对于单元数组C,C ( m , n ) 指的是单元数组中第m行第n列的单元,而 C { m , n } 指的是单元数组中第m行第n列单元中的内容

>> a
a = 

    'Test'    [1x3 double]
    [  10]    [2x2 double]

>> a(1,1)                % 第1行第1列,单元为字符串
ans = 
    'Test'
>> a{1,1}                % 第1行第1列,单元中内容为 Test
ans =
Test
>> a(1,2)                % 第1行第2列,单元为一维数组
ans = 
    [1x3 double]
>> a{1,2}                % 第1行第2列,单元中内容为1 2 3
ans =
     1     2     3

>> a(1,2)(1)             % 错误
错误: ()-索引必须显示在索引表达式的最后。

>> a{1,2}(2)             % 正确,返回单元中内容的第2个元素
ans =
     2

        4、单元数组的操作

        单元数组的合并

>> a{1,1}='Test';
>> a{1,2}=[1,2,3];
>> a{2,1}=10;
>> a{2,2}=[12,13;1,2];
>> a                            % 通过赋值,直接创建单元数组a
a = 
    'Test'    [1x3 double]
    [  10]    [2x2 double]

>> b='Jan';
>> c={ a , b }                  % 创建新的单元数组c,其第1个单元为单元数组a,第2个单元为字符串b
c = 
    {2x2 cell}    'Jan'

        单元数组中指定单元的删除

        如果要删除单元数组中指定的某个单元,则只需要将空矩阵赋给该单元。

>> a
a = 
    'Test'    [1x3 double]
    [  10]    [2x2 double]
>> a{2,1}=[]                % 删除单元数组中的一个单元
a = 
    'Test'    [1x3 double]
        []    [2x2 double]

        reshape函数改变单元数组的形状

        在使用reshape函数时不能改变单元数组中的单元总数量。如,原为2*3,可以改为3*2、6*1,但是不能改为3*1 、2*5 。

>> a={1,2,3;4,5,6}
a = 
    [1]    [2]    [3]
    [4]    [5]    [6]
>> b=reshape(a,3,2)      % 转换为 3行2列
b = 
    [1]    [5]
    [4]    [3]
    [2]    [6]
>> b=reshape(a,6,1)      % 转换为 6行1列
b = 
    [1]
    [4]
    [2]
    [5]
    [3]
    [6]

        5、单元数组操作函数

函数名说明
cell生成单元数组
cellstr生成字符型单元数组
celldisp显示单元数组的内容
cellplot图形显示单元数组的内容
cellfun对单元数组中元素指定不同的函数
iscell判断是否为单元数组
reshape改变单元数组的结构

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值