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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創建并操作數組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,270評論 0 4
  • 百度百科:陸巷古村是目前江南建筑群體中質量最高、數量最多、保存最完好的古村落。 級別:國家AAAAA級旅游景區&中...
    逸之閱讀 2,699評論 2 7
  • 時間仿佛是無聲的,悄然來到了冬天。 那樹上的葉子還在樹梢上盡力的掙扎,不想隨風飄落進而成為人們腳下的那一片...
    放逐syl閱讀 206評論 0 0
  • 今天,我們幾個北漂女生與一個來京開會的大學老師吃了個便飯。 我們幾個女生中,有研究生在讀,有少干,有已就業。一起討...
    輕的青青閱讀 231評論 0 0