1 元胞數組
元胞數組是一種包含名為元胞的索引數據容器的數據類型,其中的每個元胞都可以包含任意類型的數據。元胞數組通常包含文本字符串列表、文本和數字的組合或不同大小的數值數組。通過將索引括在圓括號 () 中可以引用元胞集。使用大括號 {} 進行索引來訪問元胞的內容。
① 元胞數組的創建
(a) 用花括號"{}"直接創建
例:C = {1,2,3;'text',rand(5,10,2),{11; 22; 33}};
(b) 採用cell(m,n,h,…)命令創建;
例:cell(3,5)
② 元胞數組的訪問
引用元胞數組的元素有兩種方法。將索引括在圓括號()中以引用元胞集。將索引括在大括號{}中以引用各個元胞中的文本、數字或其他數據。注意:大括號用於表示元胞的內容,小括號表示指定的元胞。要訪問指定元胞中的具體元素,可以在元胞數組內容下標的後面加上指定數組元胞的下標。如:C{2,3}(3,1)表示元胞a{2,3}的元素(3,1)。
例:C = {1,2,3;'text',rand(5,10,2),{11; 22; 33}}; 則C{2,1} = text。
③ 不同類型轉化
cell2mat:將元胞數組轉換為基礎數據類型的普通數組
cell2struct:將元胞數組轉換為結構體數組
cell2table:將元胞數組轉換為表
mat2cell:將數組轉換為可能具有不同元胞大小的元胞數組
num2cell:將數組轉換為相同大小的元胞數組
struct2cell:將結構體轉換為元胞數組
table2cell:將錶轉換為元胞數組
優勢:元胞數組可以存儲不同類型和大小的數據,每一個元胞元都是一個微型數據存儲器。在編程中,有時遇到需要把不同類型和大小數據統一存儲的情況,這時元胞數據就是最好的選擇。
2 結構體
結構體數組是使用名為欄位的數據容器將相關數據組合在一起的數據類型。每個欄位都可以包含任意類型的數據。
① 結構體的創建
(a) 通過對「結構體名+不同欄位」賦值來直接創建,
例2.1:
patient(1).name = 'John Doe';
patient(1).billing = 127.00;
patient(1).test = [79, 75, 73; 180, 178, 177.5];
(b) 使用關鍵字struct
s = struct('field1',values1,'field2',values2,…);
② 結構體的訪問
使用 structName.fieldName 格式的圓點表示法來訪問結構體中的數據。
例:對例2.1中姓名的訪問可用patient(1).name。
③ 數據類型轉化
struct2table:將結構體數組轉換為表
table2struct:將錶轉換為結構體數組
struct2cell:將結構體轉換為元胞數組
cell2struct:將元胞數組轉換為結構體數組
3 函數句柄
函數句柄是一種存儲函數關聯項的數據類型。可以使用函數句柄構造匿名函數或指定回調函數。此外,也可以使用函數句柄將一個函數傳遞給另一個函數,或者從主函數外部調用局部函數。
① 函數句柄的創建與調用
通過在函數名稱前添加一個@符號來為函數創建句柄。
例3.1:
fun= @(x) x.^2;
調用:
a = 4;
b = fun(a)
ans = 16;
例3.2:由函數句柄組成的數組
C = {@sin, @cos, @tan};
C{2}(pi)
ans = -1;
例3.3:使用結構體數組
S.a = @sin; S.b = @cos; S.c = @tan;
S.a(pi/2)
ans = 1;
② 函數傳遞
使用函數句柄作為其他函數(稱為功能函數)的輸入參數。這些函數基於某個範圍內的值計算數學表達式。典型的功能函數包括integral、quad2d、fzero 和 fminbnd。
例 3.4:計算自然對數從 0 到 5 範圍內的積分
a = 0;
b = 5;
q1 = integral(@log,a,b)
q1 = 3.0472;
③ 函數參數化
(a) 使用嵌套函數參數化
定義參數的一種方法是使用嵌套函數 - 完全包含於程序文件中另一個函數內的函數。
例 3.5
function y = findzero(b,c,x0)
y = fzero(@poly,x0);
% 嵌套函數poly
function y = poly(x)
y = x^3 + b*x + c;
end
end
(b) 使用匿名函數進行參數化
訪問額外參數的另一種方法是使用匿名函數。匿名函數是可以在單個命令中定義而無需創建一個單獨程序文件的函數。這些函數可以使用當前工作區中可用的任何變量。
例 3.6
b = 2;
c = 3.5;
cubicpoly = @(x) x^3 + b*x + c;
x = fzero(cubicpoly,0)
x = -1.0945
例 3.7:使用匿名函數調用在函數文件中定義的更複雜的目標函數
cubicpoly.m文件內容如下:
function y = cubicpoly(x,b,c)
y = x^3 + b*x + c;
end
調用:
b = 2;
c = 3.5;
x = fzero(@(x) cubicpoly(x,b,c),0)
x = -1.0945