5 Matlab 的变量与数据类型

计算机本质上是一个能够处理数据的机器。Matlab 可以处理很多类型的数据,我们功利一点,先只了解最常用的几种数据类型。其他的数据类型,随用随查。

从这一次教程开始,大家要勤在命令行窗口中练习。

数值数据(Numeric)

可以把它理解为数学意义的数字。Matlab 默认把数值型数据按照双精度浮点型存储。咱们先不管什么是双精度浮点型,最直观的了解就是咱们在Matlab 中做数值计算时,它的精度是小数点后4位。

你可以试着在命令行窗口中输入以下命令,看看这样的数值计算(输入完命令后要按回车。在>>符号后面是输入的内容,ans = 之类的内容,是 matlab 在执行命令后的输出,后文不再解释类似的输入与输出)。

>> 3 + 4
ans = 
    7
>> 3 / 4
ans = 
    0.7500

字符串(string)

以单引号'或双引号"括起来的任意文本,如'abc'就是一个字符串,它包含a, b, c三个字符,也可以写成"abc"

请注意,单引号或双引号只是字符串的边界,它并不包含在字符串当中。那如果字符串本身包含有单引号或双引号时怎么办?

这里存在两类情况,我们用写字符串I'm OKI"m OK来举例.

  1. 如果字符串本身的引号与字符串边界的引号不同,则上述例子在程序中应该写成'I"m OK'"I'm OK".
  2. 字符串本身的引号与字符串边界的引号相同,则上述例子的写法就是这样的:'I''m OK'"I""m OK". 注意字符I后面的引号写了两次。

大家可以思考一下,如果字符串里面既包含'也包含"怎么办?

在 matlab 中用不同的方法试试:

>>'I"m OK'
ans = 
    'I'm OK'
>>"I'm OK"
ans = 
    "I'm OK"
>>"I""m OK"
ans = 
    "I"m OK"
>> 'I''m OK'
ans = 
    'I'm OK'
>> 'I''m "God"!'
ans = 
    'I'm "God"!'

字符串是文本,而计算机只能处理数字。所以需要先将文本转换为数字才能执行进一步的操作。这就涉及到编码,所有的文本先通过编码计算方案转换为数字再存储到计算机里。

最早的编码方案是美国人搞出来的,只负责127个字符(大小写英文字母加上一些符号和数字)的编码。这种编码方案被称为ASCII编码。比如,在这个编码方案里,a对应的数字是97, b对应的是98. 所以,大家应该能理解下面的计算结果。

>> 'a' + 'b'
ans = 
    195

编码方案还有很多种,比如中国的汉字编码采用的是 GBK 编码,也有采用 GB2312 的,有兴趣的小伙伴们,可以自己去查一下。

逻辑型数据(bool)

逻辑型数据,很多人都习惯上把它称为布尔值。在 Matlab 中,它只有truefalse这两个值,请注意大小写。Matlab 用1表示true,而用0表示false.

我们在命令行窗口中看看这一特性:

>> true
ans = 
  logical
  1
>> false
ans = 
  logical
  0

布尔值可以通过关系操作符计算得到,关系操作符主要有以下几种(如果对以下的判断回答为“是”,则结果为 true,否则结果为 false.):

  • == 判断两边的值是否相等;
  • ~= 判断两边的值是否不等;
  • > 判断左边的值是否大于右边的值;
  • < 判断左边的值是否小于右边的值;
  • >= 判断左边的值是否大于等于右边的值;
  • <= 判断左边的值是否小于等于右边的值。

请看例子:

>> 3 == 5
ans =
  logical 
  0
>> 3 ~= 5
ans = 
  logical
  1
>> 3 > 5
ans = 
  logical 
  0
>> 3 <= 5
ans = 
  logical
  1

多个关系计算式可以通过逻辑运算符连接得到更复杂的逻辑表达式。逻辑运算符主要有以下三种:

  • & 逻辑与(AND),只有当&两边的值都为 true 时,结果才为 true.
  • | 逻辑或(OR),当|两边的值中至少有一个为 true时,结果为 true.
  • ~ 逻辑非(NOT),它是单目操作符,也就是~A的形式。如果A为true,则~A为 false. 反之则为 true.

结合例子进一步理解:

>> 3 | 5
ans = 
  logical 
  1
>> -1 & 0
ans = 
  logical 
  0
>> 'a' | 0
ans = 
  logical
  1
>> ~'c'
ans = 
  logical
  0
>> ~0
ans = 
  logical
  1

这里可能有小伙伴比较懵,几个意思?前面说过,true 被 Matlab 存储为1,而false被存储为0. 更进一步,在逻辑运算过程中,Matlab 将所有的非零数据都当作是 true.

继续看例子:

>> (~ (2 > 3)) & (3 <= 4) | (5 > 3)
ans = 
  logical
  1

这里用了括号,以提高某些块的运算优先级(跟数学里做的一样,都是先算括号里的,然后才算其他的)。可以想一想,如果我写成这样:~ 2 > 3 & 3 <= 4 | 5 > 3,大家能一眼看出先算哪个,后算哪个吗?

为了避免歧义,勤用括号就没错。&, |, ~这三种运算符的运算的规则是从左至右,其他的优先级关系我们就不管了,留着脑容量处理更重要的事情。

逻辑运算常常用于循环或条件判断中。比如:

if 5 > 3
    disp ('OK')
end

如果5 > 3,就显示OK.

while 3 < 5
    disp ('x smaller than y')
end

这是一个循环操作,只要3 < 5 就一直显示3 smaller than 5. 这个例子,是一个死循环,也就是说它会一直这么执行下去,除非强制终止(在Matlab中是按ctrl + c键)。实际工作中,很少这么写。

变量

变量的概念与初中代数中变量概念几乎是相同的。只是在计算机程序中,变量可以是任意的数据类型。在程序中,使用变量名来表示变量。顾名思义,变量名就是变量的名称。变量名不能乱取,在 Matlab 中,变量的命名必须遵守以下规则:

  • 第一个字符必须是英文字母
  • 可以是数字、英文字母以及下划线_的组合
  • 长度不超过63个字符
  • 大小写敏感,也就是说变量cost与变量Cost, COsT等是不一样的。
  • 有 20 个单词是 Matlab 内置的关键字,这些关键字不能用作变量名。具体是哪 20 个单词,大家可以使用iskeyword命令查看。

可以通过赋值操作符=将数据赋值给变量。

a = 3
b = '2'
c = 'hello world'
d = true

注意,这里的=与数学里的=不一样。

本质上,变量是一个指针,通过指针的指向我们可以获取变量的值。赋值操作只是改变了这个指针的指向。

我们试着用以上知识来理解下面的结果:

>> a = 5
a = 
    5
>> a = a + 3
a = 
    8
>> b = a
b = 
    8
>> a = 'Hello world!'
a = 
    'Hello world!'
>> disp (b)
    8

第一次,Matlab 创建了一个变量a和数据5,并且通过赋值操作,将变量a指向数据5
第二次,先将a指向的数据5加上3,得到8,通过赋值操作,将变量a指向了新的数据8
第三次,Matlab 创建了一个新的变量b,通过赋值操作,变量b与变量a指向同一个数据8. 注意了,这里两个变量指向了同一个数据。
第四次,Matlab 创建了一个字符串数据Hello world!,通过赋值操作,将变量a指向了这个字符串数据。注意了,虽然变量a的指向发生了变化,但是b仍然是指向数据8的。
最后,用disp命令查看下b的值是什么。

    原文作者:花生_毛豆
    原文地址: https://www.jianshu.com/p/99def2386e9a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞