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的值是什么。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,204评论 0 4
  • 百度百科:陆巷古村是目前江南建筑群体中质量最高、数量最多、保存最完好的古村落。 级别:国家AAAAA级旅游景区&中...
    逸之阅读 2,503评论 2 7
  • 时间仿佛是无声的,悄然来到了冬天。 那树上的叶子还在树梢上尽力的挣扎,不想随风飘落进而成为人们脚下的那一片...
    放逐syl阅读 185评论 0 0
  • 今天,我们几个北漂女生与一个来京开会的大学老师吃了个便饭。 我们几个女生中,有研究生在读,有少干,有已就业。一起讨...
    轻的青青阅读 224评论 0 0