小學時候咱們就知道,數學中有天然數、整數、分數、小數等等不少種類型的數。到了中學,咱們又發現了其實還有無理數、複數這些有些特殊的數。到了大學學了高等數學以後,咱們又知道了其實還存在着無窮大、無窮小這樣「難以想象」的「數」。
爲了對各類數據類型都可以作到有效處理,Matlab中也規定了一系列不一樣的數據類型,下面對其進行一一介紹。算法
數值類型其實就對應於數學中的各類類型的數,包括下面幾種:數組
現實世界中不少事情都是真假之間,好比真假美猴王,真錢假錢,真相與假象...Matlab世界也存在着這種用於判斷真假的數據類型,一般0表示假(0表示無,什麼都沒有,四大皆空,固然是假),而非0的數表示真。函數
在數學中,咱們也常常會遇到判斷真假的問題,好比判斷1>2
這個式子是否成立。Matlab中提供了一系列的關係運算符:編碼
關係運算符 | 含義 |
---|---|
< | 小於 |
<= | 小於或等於 |
> | 大於 |
>= | 大於或等於 |
== | 等於 |
~= | 不等於 |
下面將用一段Matlab代碼來展示這些關係運算符的用法:spa
?1>2 % 由於1不大於2,因此結果是假,輸出0 ans = 0 ?1<=2 % 由於1是小於等於2的,因此結果是真,輸出1 ans = 1 ?1~=2 % 由於1是不等於2的,因此結果是真,輸出1 ans = 1 ?1==2 % 由於1不等於2,因此結果是假,輸出0 ans = 0
除了關係運算符之外,Matlab中還有3個邏輯運算符:與、或、非,是對運算數按二進制位進行運算的:code
邏輯運算符 | 含義 |
---|---|
& | (按位)與,兩個數都爲真結果才爲真,不然結果爲假 |
| | (按位)或,兩個數至少有一個爲真,結果才爲真,不然結果爲假 |
~ | (按位)非,對單個數進行操做,若該數爲真,則結果爲假,不然爲真 |
代碼舉例以下:對象
?2&5 % 由於2和5都是非零的數,因此都爲真,它們的與運算結果也是真 ans = 1 ?2&0 % 由於2是非零的數,表示真,而0表示假,因此它們的與運算結果是假 ans = 0 ?2 | 5 % 由於2和5都表示真,因此它們的或運算結果也爲真 ans = 1 ?2 | 0 % 由於2表示真,0表示假,因此兩個數中有一個數是真,因此結果也是真 ans = 1 ?~0 % 由於0表示假,因此它的非運算的結果就相反,爲真 ans = 1 ?~2 % 由於2表示真,因此它的非運算結果爲假 ans = 0
還記得在咱們的第一篇Hello World程序中用disp
函數輸出Hello World
嗎?裏面的"Hello World"其實就是一個字符串,它實際上是由多個單字符組成的字符數組,請看示例代碼:element
?str = 'Hello World'; % 字符串要使用單引號括起來,不要使用雙引號 ?disp(str) Hello World ?size(str) % 求字符串str的長度,返回的結果爲:[1,11],表示str是一個1維、有11個元素的數組 ans = 1 11 ?str(1,5) % 顯示str的第1行、第5個元素(注意:下標是從1開始的) ans = o ?str(7) % 顯示str的第7個元素 ans = W ?abs(str) % 求str每一個元素的絕對值(顯示字母的ASCII碼,若是是中文,則將顯示字符的unicode編碼) ans = 72 101 108 108 111 32 87 111 114 108 100 ?abs(str(1)) % 求str第一個元素的絕對值,返回72,這正是字母'H'的ASCII碼 ans = 72
結構體類型是一種特殊的數據類型,至關於其餘面嚮對象語言中的對象,也能夠當作是C語言中的結構體類型。unicode
建立結構體類型的方法十分簡單:結構體名稱.字段名稱 = 字段值
,而且支持嵌套。字符串
下面給出一段示例程序,用於建立一個名爲Person的結構體,它有name、age、language(會說的語言,是一個單元數組,後面講)、score(成績,也是一個結構體)四個屬性:
?Person.name = 'Tom'; ?Person.age = 20; ?Person.language = {'Chinese','Spanish'}; ?score.Math = 78; ?score.English = 98; ?Person.score = score; ?Person Person = name: 'Tom' age: 20 score: [1x1 struct] language: {'Chinese' 'Spanish'} ?Person.score ans = Math: 78 English: 98
數組是一堆元素的集合,這些元素能夠是數值類型,也能夠是字符串、結構體等類型。同一個數組中的元素的數據類型必須都相同。數組的運算其實是對數組中的每一個元素同時進行運算。
矩陣能夠當作是多維數組,矩陣的運算遵循線性代數運算法則。矩陣將在後面的Blog中進行詳細介紹。
建立數組有以下幾種方式:
下面用實例代碼介紹一下建立數組的幾種方式:
?array = [1,2,3,4,5] % 枚舉式,逐一列舉數組中的每一個元素,元素之間用逗號隔開,也能夠用空格隔開 array = 1 2 3 4 5 ?array2 = 1:5 % 等差數列式,以等差數組的形式建立數組,分別給出首、尾元素和步長(即等差數列的公差),步長爲1時能夠省略 array2 = 1 2 3 4 5 ?array3 = 1:2:6 % 等差數列式,這裏步長爲2,能夠看出,結果並不必定會包含尾元素 array3 = 1 3 5 ?array4 = linspace(1,5,6) % 區間線性分割式,調用linspace函數,前兩個參數分別爲被分割區間的下限和上限(閉區間),第三個參數爲分割個數 array4 = 1.0000 1.8000 2.6000 3.4000 4.2000 5.0000
單元數組其實是一種廣義的矩陣,與矩陣不一樣的是,單元數組能夠容納不一樣數據類型的元素,經過大括號'{}'來界定數組元素。假如cell是一個單元數組,那麼能夠經過cell{i,j}
的方式來獲取cell的元素。
實例代碼以下:
?cell1 = {'demo',1:2:10,5} cell1 = 'demo' [1x5 double] [5] ?whos cell1 Name Size Bytes Class cell1 1x3 332 cell array Grand total is 13 elements using 332 bytes ?cell{1,3} ans = 5 ?cell2 = {'demo2','hello';5:-1:0,Inf} cell2 = 'demo2' 'hello' [1x6 double] [ Inf] ?whos cell2 Name Size Bytes Class cell2 2x2 444 cell array Grand total is 21 elements using 444 bytes ?cell2{2,2} ans = Inf ?a = cell(2,2) % 調用cell函數來建立一個空的單元數組 a = [] [] [] [] ?a{1,2} = 5 a = [] [5] [] [] ?whos a Name Size Bytes Class a 2x2 112 cell array Grand total is 5 elements using 112 bytes
這裏要注意的一點是,對於字符串類型,實際上是字符數組,那麼怎麼表示多個字符串組成的數組呢?若是用通常數組表示,會發現出了問題(全部字符串都鏈接到一塊兒了):
?strs = ['aa','bcd','ef']; ?strs strs = aabcdef
那麼這個時候就能夠用單元數組來表示多個字符串的數組了,就不會存在這個問題:
?strs2 = {'aa','bcd','ef'}; ?strs2 strs2 = 'aa' 'bcd' 'ef'
map是一種"鍵-值"對類型的數據類型,是Matlab R2012a
版本新增的數據類型,因此下面的示例代碼是在正式版Matlab上運行的而非精簡版Matlab。能夠經過containers.Map
函數建立一個map對象,示例代碼以下:
>> data = containers.Map({'name','age','location'},{'Tom',20,'USA'}); >> data data = Map with properties: Count: 3 KeyType: char ValueType: any >> whos data Name Size Bytes Class Attributes data 3x1 8 containers.Map >> data('name') ans = 'Tom'