Matlab 教材:在 Matlab 中呼叫 C (MS-Windows)

這幾篇文章的內容需要一些預備知識:

Matlab 是一個程式語言,所以 「沒有一個程式語言在各方面都比所有的程式語言優異」 這一句話也適用在 Matlab 上: Matlab 並不是所有的計算都很有效率,最明顯的例子就是跟迴圈有關的工作。 這是一個很糟糕的缺陷,因為迴圈是程式語言中最基本的結構之一 (計算機最大的好處是可以大量重複執行瑣碎的工作)。 Matlab 本身對這個致命的缺陷是無計可施的, 所以 Matlab 提供了跟 C 或是 Fortran 溝通的介面, 利用這兩個程式語言來彌補自身的缺陷。 一般來說,我們會讓 Matlab 完成大部份的工作, 而將一部份的計算交由 C 來完成,這將有助於提升程式的效率。 這個溝通介面同時也帶來另一個好處,就是可以省去某些 subroutine 的再開發。 有一些重要的 subroutine─如排序─已經用 C 語言完成了; 使用者如果需要這類的 subroutine 而剛好 matlab 沒有提供, 則使用者可以經由這個介面呼叫 C 版本的 subroutine, 而不用自己動手再寫一次。

對使用者而言,由 C 寫成的 subroutines 和 matlab 內建的 subroutines 是相同的; 我們可以在 Matlab 中呼叫由 C 寫成的 subroutines, 就好像在呼叫 Matlab 內建的 subroutines。 用 C 寫的 subroutine 被稱作一個 MEX-file, 這意味著一個 subroutine 將會是一個檔案。 在 MS-Windows 中,MEX-file 的副檔名會是 DLL,主檔名是 subroutine 的名字。 如果建立了一個 MEX-file 並放置到 Matlab 可以找到的目錄下, 則這個 MEX-file (subroutine) 的呼叫跟 Matlab 內建的 subroutine 一樣簡單。 事實上,Matlab 內建的 subroutines 中就有不少 MEX-file, 而非全都是 M-file 或是隱藏於系統中, 在資料夾 matlab/toolbox 下的 subroutines 就有許多 MEX-file。

以使用者的角度來看,最好盡量別自己完成一個 MEX-file。 因為 Matlab 是一個較高階的語言,它的好處在於可以讓使用者快速完成一個程式。 如果我們過度使用 MEX-file,則會失去利用 Matlab 帶來的優勢。 李易霖 (2004/08/04) --- [Prev] [Next] [Up]