摘要:Matlab中有15種基本數據類型,主要是整型、浮點、邏輯、字符、日期和時間、結構數組、單元格數組以及函數句柄等。Matlab主要數據類型的結構圖如下所失:1.整型整型:通過intmax(class)和intmin(class) 函數返回該類整型的最大值和最小值,例如intmax(‘int8’)=1272...
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’實際上是一個1行9列向量。構成矩陣或向量的行字符串長度必須相同?梢允褂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’,日期序列數如729300(0000年1月1日為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,訪問其中第7行1至25列數據可以使用命令: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,字段使用每個學生的名稱命名,分別為wang和chen,每個學生下面包含名為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)
|