MATLAB數據類型
責任編輯:icynet    瀏覽:3227次    時間: 2015-06-02 21:55:46      

摘要:Matlab中有15種基本數據類型,主要是整型、浮點、邏輯、字符、日期和時間、結構數組、單元格數組以及函數句柄等。Matlab主要數據類型的結構圖如下所失:1.整型整型:通過intmax(class)和intmin(class) 函數返回該類整型的最大值和最小值,例如intmax(‘int8’)=1272...

關鍵詞:MATLAB 數據 類型
分享到:

Matlab中有15種基本數據類型,主要是整型、浮點、邏輯、字符、日期和時間、結構數組、單元格數組以及函數句柄等。Matlab主要數據類型的結構圖如下所失:

1.整型

整型:通過intmax(class)intmin(class) 函數返回該類整型的最大值和最小值,例如intmax(‘int8’)=127

2.浮點

浮點數:REALMAX('double')REALMAX('single')分別返回雙精度浮點和單精度浮點的最大值,REALMIN('double')REALMIN ('single')分別返回雙精度浮點和單精度浮點的最小值。

3.邏輯

Logical:下例是邏輯索引在矩陣操作中的應用,將5*5矩陣中大于0.5的元素設定為0

A = rand(5);

A(A>0.5)=0

4.字符

Matlab中的輸入字符需使用單引號。字符串存儲為字符數組,每個元素占用一個ASCII字符。如日期字符:DateString=’9/16/2001’實際上是一個19列向量。構成矩陣或向量的行字符串長度必須相同?梢允褂char函數構建字符數組,使用strcat函數連接字符。

例如,命令 name =['abc' ; 'abcd'] 將觸發錯誤警告,因為兩個字符串的長度不等,此時可以通過空字符湊齊如:name =['abc ' ; 'abcd'],更簡單的辦法是使用char函數:char(‘abc’,’abcd’),Matlab自動填充空字符以使長度相等,因此字符串矩陣的列緯總是等于最長字符串的字符數,例如size(char(‘abc’,’abcd’))返回結果[2,4],即字符串’abc’實際存在的是’abc ’,此時如需提取矩陣中的某一字符元素,需要使用deblank函數移除空格如name=char(‘abc’,’abcd’); deblank(name(1,:))。此外,Matlab同時提供一種更靈活的單元格數組方法,使用函數cellstr可以將字符串數組轉換為單元格數組:

data= char(‘abc’,’abcd’)

length(data(1,:))  ->? 4

cdata=cellstr(data)

length(cdata{1})   ->?3

常用的字符操作函數

blanks(n)   返回n個空字符

deblank(s)   移除字符串尾部包含的空字符

eva l(string)   將字符串作為命令執行

findstr(s1,s2)  搜索字符串

ischar(s)   判斷是否字符串

isletter(s)   判斷是否字母

lower(s)   轉換小寫

upper(s)   轉換大寫

strcmp(s1,s2) 比較字符串是否相同

strncmp(s1,s2,n) 比較字符串中的前n個字符是否相同

strrep(s1,s2,s3)  s1中的字符s2替換為s3

5.日期和時間

Matlab提供三種日期格式:日期字符串如’1996-10-02’,日期序列數如729300000011日為1)以及日期向量如 1996 10 2 0 0 0,依次為年月日時分秒。

常用的日期操作函數

datestr(d,f)   將日期數字轉換為字符串

datenum(str,f)  將字符串轉換為日期數字

datevec(str)  日期字符串轉換向量

weekday(d)   計算星期數

eomday(yr,mth)  計算指定月份最后一天

calendar(str)  返回日歷矩陣

clock   當前日期和時間的日期向量

date    當前日期字符串

now    當前日期和時間的序列數

6.結構

結構是包含已命名數據容器或字段的數組。結構中的字段可以包含任何數據,例如:

構建結構數組:賦值方法

下面的賦值命令產生一個名為patient的結構數組,該數組包含三個字段:

patient.name = 'John Doe';

patient.billing = 127.00;

patient.test = [79 75 73; 180 178 177.5; 220 210 205];

在命令區內輸入patient可以查看結構信息:

name: 'John Doe'

billing: 127

test: [3x3 double]

繼續賦值可擴展該結構數組:

patient(2).name = 'Ann Lane';

patient(2).billing = 28.50;

patient(2).test = [68 70 68; 118 118 119; 172 170 169];

賦值后結構數組變為[1 2]。

構建結構數組:struct函數

函數基本形式為:strArray =struct('field1',val1,'field2',val2, ...)

例如:

weather(1) = struct('temp', 72,'rainfall', 0.0); weather(2) =struct('temp', 71,'rainfall', 0.1);

weather = repmat(struct('temp', 72, 'rainfall', 0.0), 1, 3);

weather = struct('temp', {68, 80, 72}, 'rainfall', {0.2, 0.4,0.0});

訪問結構數據

以下都是合法的結構數組訪問命令:

mypatients = patient(1:2)  獲取子結構數據

mypatients(1)    訪問結構數據

patient(2).name    訪問結構數據中的特定字段

patient(3).test(2,2)   訪問結構數據中的特定字段(該字段為數組)

bills = [patient.billing]   訪問多個結構

tests = {patient(1:2).test}  提取結構數據轉換成單元格數組

使用結構字段的動態名稱

通過structName.(expression)可以賦予結構字段名稱并訪問數據。例如字段名為expression、結構名為structName,訪問其中第7125列數據可以使用命令:structName.(expression)(7,1:25)。

例如,存在一個學生每周成績數據結構數組,其數據通過以下方式建立:

testscores.wang.week(1:25) = ...

[95 89 76 82 79 92 94 92 89 81 75 93 ...

85 84 83 86 85 90 82 82 84 79 96 88 98];

testscores.chen.week(1:25) = ...

[87 80 91 84 99 87 93 87 97 87 82 89 ...

86 82 90 98 75 79 92 84 90 93 84 78 81];

即結構名為testscores,字段使用每個學生的名稱命名,分別為wangchen,每個學生下面包含名為week的成績結構數組。

現計算給定結構名稱、學生名稱和起止周數的平均分數。

在命令窗口中輸入 editavgscore.m,輸入以下代碼后保存文件:

function avg = avgscore(struct,student, first, last)

avg = sum(struct.(student).week(first:last))/(last - first + 1);

在命名窗口中輸入:avgscore(testscores,'chen', 7, 22) 計算學生陳從第7周到第22周的平均分數。

添加和刪除結構字段

命令[struct](index).(field)可添加或修改字段。如patient(2).ssn= '000-00-0000' 在結構patient中添加一個名為ssn的字段。

刪除字段使用rmfield函數,如patient2 =rmfield(patient, 'name') 刪除name字段并產生新的結構。

單元格數組

單元格數組提供了不同類型數據的存儲機制,可以儲存任意類型和任意緯度的數組。

訪問單元格數組的規則和其他數組相同,區別在于需要使用花括號{}訪問,例如A{2,5}訪問單元格數組A中的第2行第5列單元格。

構建單元格數組:賦值方法

使用花括號標識可直接創建單元格數組,如:

A(1,1) = {[1 4 3; 0 5 8; 7 2 9]};

A(1,2) = {'abcd'};

A(2,1) = {3+7i};

A(2,2) = {-pi:pi/10:pi};

上述命令創建2*2的單元格數組A。繼續添加單元格元素直接使用賦值如A(2,3)={5}即可,注意需使用花括號標識。簡化的方法是結合使用花括號(單元格數組)和方括號()創建,如C = {[1 2],[3 4]; [5 6], [7 8]};

構建單元格數組:函數方法

Cell函數。如:

B = cell(2, 3);

B(1,3) = {1:3};

訪問數據

通過索引可直接訪問單元格數組中的數據元素,例如:

N{1,1} = [1 2; 4 5];

N{1,2} = 'Name';

N{2,1} = 2-4i;

N{2,2} = 7;

c = N{1,2}

d = N{1,1}(2,2)

函數句柄

函數句柄是用于間接調用一個函數的Matlab值或數據類型。在調用其它函數時可以傳遞函數句柄,也可在數據結構中保存函數句柄備用。通過命令形式 fhandle =@functionname 可以創建函數句柄,例如trigFun=@sin,或匿名函數sqr = @(x)x.^2;。

使用句柄調用函數的形式是fhandle(arg1, arg2, ..., argn) fhandle()(無參數)。如:

trigFun(1)。例:

function x = plotFHandle(fhandle, data)

plot(data, fhandle(data))

plotFHandle(@sin, -pi:0.01:pi)



】【打印繁體】【投稿】 【收藏】 【推薦】 【舉報】 【評論】 【關閉】【返回頂部
發表評論
帳  號: 密碼: (新用戶注冊)
驗 證 碼:
表 情:
內  容:
發表評論
用戶評價(0)

暫時還沒有任何評論

亚洲AV国产AV手机在线