一、數值類型
1、實數
Matlab的數值類型分為三種,整形,單精度浮點型和雙精度浮點型,具體的情況如下。
有幾個地方需要注意一下:
- 系統默認的數值類型是double的,所以使用double時可以省略double符號
- double類型的數值與其他類型的數值運算時,結果為其他類型的數值,single類型的數值不能和整型直接運算,各種不同位數的整形之間也不能直接運算。
因為系統默認的數據類型是雙精度浮點,所以在將變量設置為整數時需要進行轉換,matlab提供了如下的轉化函數。
函數
|
運算法則
|
例子
|
floor
|
向下取整
|
floor(1.4)=1;floor(3.5)=3;floor(-3.5)=-4
|
ceil
|
向上取整
|
ceil(1.4)=2;ceil(3.5)=3;ceil(-3.5)=-3
|
round
|
取最接近的整數,如果小數部分是0.5,則向絕對值大的方向取整
|
round(1.4)=1;round(3.5)=4;round(-3.5)=-4
|
fix
|
向0取整
|
fix(1.4)=1;fix(3.5)=3;fix(-3.5)=-3
|
2、復數
復數由實部和虛部兩部分構成,在Matlab中,字符i或j默認作為虛部標志,關於復數的相關函數如下:
函數
|
說明
|
函數
|
說明
|
complex(a,b)
|
構造以a為實部,以b為虛部的復數
|
i,j
|
虛部標識
|
real(z)
|
返回復數z的實部
|
image(z)
|
返回復數z的虛部
|
abs(z)
|
返回復數z的模
|
angle(z)
|
返回復數z的輔角
|
conj(z)
|
返回復數z的共軛復數
|
|
|
3、無窮量(Inf)和非數值量(NaN)
Matlab中使用Inf和-Inf分別表示正無窮大和負無窮大,NaN表示非數值量。正負無窮大一般是由於運算溢出產生,非數值量則是由於類似0/0或Inf/Inf類型的非正常運算產生。
二、字符與字符串
Matlab將文本作為特征字符串或簡單地當做字符串,但是實際存儲的是字符串的ASCII碼。abs函數可以獲得字符串的具體值,使用方法如下:
>> a='abc'
a =
abc
>> abs(a)
ans =
97 98 99
三、結構
Matlab中也存在與C語言類似的結構這種類型,一個結構可以通過字段存儲多個不同類型的數據。結構中的各個字段可以是不同的類型。
1、創建結構對象
有兩種創建結構的方法,一種是逐一輸入一個結構的各個屬性,例如下面創建stu1的過程;另一種是使用struct函數,例如創建stu2的過程。
>> stu1.name='xing';
>> stu1.sno='123';
>> stu1
stu1 =
name: 'xing'
sno: '123'
>> stu2=struct('name','sno','xiao','234')
stu2 =
name: 'sno'
xiao: '234'
2、訪問結構對象
使用結構名.屬性名的方式可以獲取結構的屬性。
>>
stu1.name
ans =
xing
3、連接結構對象
兩個結構可以連接起來,但是要連接的這個兩個結構的對應屬性的類型應該相同。
>> stu1.name='xing';
>> stu1.sno=int16(123);
>> stu2.name='xiao';
>> stu2.sno=int16(456);
>> stu=[stu1,stu2]
stu =
1x2 struct array with fields:
name
sno
>> stu(1)
ans =
name: 'xing'
sno: 123
四、單元數組
單元數組是一種廣義矩陣。每一個單元可以包括一個任意數組,如數值數組、
字符數組、結構體數組或另外一個單元數組,因而每一個單元可以具有不同的尺寸和內存。
1、創建單元數組
有兩種創建單元數組的方法:通過賦值語句或cell函數創建。
(a)使用賦值語句創建單元數組:單元數組使用花括號”{} ”來創建,使用“,”或空格來分隔單元,使用“;”來分行。
>> A={'x',[2;3;6];10,2*pi}
A =
'x' [3x1 double]
[10] [ 6.2832]
(b)使用cell函數創建空單元數組
>> B=cell(2,2)
B =
[] []
[] []
2、訪問單元數組
在單元數組中,單元和單元中的內容屬於不同范疇,這意味着訪問單元和訪問單元中的內容是兩個不同的操作。對於單元數組C,C(m,n)指的是單元數組中第m行第n列的單元,而C{m,n}則是指的是第m行第n列的單元中的內容。
>> A(1,1)
ans =
'x'
>> A(1,2)
ans =
[3x1 double]
>> A{1,2}
ans =
2
3
6
3、單元數組的合並
>> C={'a','b';'c','d'}
C =
'a' 'b'
'c' 'd'
>> D={'1','2'}
D =
'1' '2'
>> E={A;B}
E =
{2x2 cell}
{2x2 cell}
>> E{1,1}
ans =
'x' [3x1 double]
[10] [ 6.2832
五、映射容器
Matlab中的映射容器就是Map類,這里的Map類與java的Map類類似,也是一個key對應着一個value,Map類的所有對象都有三個屬性:
- Count:表示Map中存儲的鍵值對的數量
- KeyType:表示Map對象中包括的key的類型
- ValueType:表示Map中的數據類型
1、創建Map對象
>> mapObj=containers.Map({1,2},{'xing','xiao'})
mapObj =
Map with properties:
Count: 2
KeyType: double
ValueType: char
2、查看和讀取Map對象
可以通過使用keys函數查看Map對象中包含的所有鍵;通過values函數查看所有的值。
%獲取所有的鍵
>> keys(mapObj)
ans =
[1] [2]
%獲取所有的值
>> values(mapObj)
ans =
'xing' 'xiao'
%獲取指定鍵的值
>> mapObj(1)
ans =
xing
%獲取多個值
>> values(mapObj,{1,2})
ans =
'xing' 'xiao'
3、編輯Map對象
(1)添加鍵值對
>> mapObj(3)='ming'
mapObj =
Map with properties:
Count: 3
KeyType: double
ValueType: char
>> values(mapObj)
ans =
'xing' 'xiao' 'ming'
(2)刪除鍵值對
>> remove(mapObj,2)
ans =
Map with properties:
Count: 2
KeyType: double
ValueType: char
>> values(mapObj)
ans =
'xing' 'ming'
(3)修改鍵值對
如果需要在值不變的情況下對鍵名進行修改,首先要刪除鍵名和對應的值,然后再添加一個有正確鍵名的新條目。通過覆蓋原有的值,可以在鍵名不變的情況下對值進行修改。
>> remove(mapObj,1)
ans =
Map with properties:
Count: 1
KeyType: double
ValueType: char
>> mapObj(11)='xing'
mapObj =
Map with properties:
Count: 2
KeyType: double
ValueType: char
>> mapObj(3)='aaa'
mapObj =
Map with properties:
Count: 2
KeyType: double
ValueType: char
>> keys(mapObj)
ans =
[3] [11]
>> values(mapObj)
ans =
'aaa' 'xing'
六、數據類型之間的轉換
類型識別函數:
函數
|
功能
|
函數
|
功能
|
iscell
|
判斷是否為單元數組
|
isnumeric
|
判斷是否為數值數組
|
isreal
|
判斷是否為實數
|
ischar
|
判斷是否為字符數組
|
isstr
|
判斷是否為字符串
|
isfloat
|
判斷是否為浮點數
|
isstruct
|
判斷是否為結構數組
|
whos
|
列舉變量類型及相關數據
|
類型轉換函數:
函數
|
功能
|
函數
|
功能
|
dec2bin
|
十進制轉為二進制
|
int2str
|
整數轉為字符串
|
num2str
|
數值轉為字符串
|
str2double
|
字符串轉為double
|