本節將介紹兩個範例,以便對二維矩陣進行處理,
第一個範例是 arrayx2.c,可將輸入二維矩陣(可能包含實部和虛部)乘以 2,其內容如下:
接著,我們可以編譯以上程式:
>> mex arrayx2.c
欲確認可執行檔的存在,可輸入如下:
>> which arrayx2
D:\matlabBook\MATLAB程式設計:進階篇\03-應用程式介面\arrayx2.mexw64
欲進行測試,可輸入如下:
>> arrayx2([1 2 3])
ans =
2 4 6
>> arrayx2([1+i 2+2i 3+3i; 4 5 6])
ans =
2.0000 + 2.0000i 4.0000 + 4.0000i 6.0000 + 6.0000i
8.0000 10.0000 12.0000
>> arrayx2('Test string')
??? Input must be a double.
本節的第二個 MEX 範例是 pairdist.c(檔名為「pairwise distance」的簡稱),可接受兩個輸入矩陣 A 和 B,矩陣的大小分別是 p×m 及 p×n,此兩個矩陣分別代表由 m 個直行向量及 n 個直行向量所形成的集合,而每一個向量的長度都是 p。此 MEX 檔案傳回一個距離矩陣 C,其中 C(i, j)為向量 A(:, i) 和向量 B(:, j) 的矩離。
pairdist.c 的程式碼如下:
接著,我們可以對以上程式進行編譯:
>> mex pairdist.c
編譯完此程式後,可測試如下:
>> which pairdist
D:\matlabBook\MATLAB程式設計:進階篇\03-應用程式介面\pairdist.mexw64
>> pairdist([2 3], [2 3 4])
ans =
0 1 2
1 0 1
>> A = rand(2, 3);
>> B = rand(2, 4);
>> C = pairdist(A, B)
C =
0.5104 0.9806 0.4544 0.5649
0.3562 0.2347 0.5911 0.2628
0.2101 0.5891 0.2675 0.1639
>> pairdist('string1', 'string2')
??? Input 1 is not a full numerical array!
本節所介紹的範例,均是對二維矩陣進行處理,其它更複雜的範例,可見 MATLAB API 的相關手冊。
MATLAB程式設計:進階篇