?? mathtools592.txt
字號:
發信人: FangQ (木頭蟲子), 信區: MathTools
標 題: Matlab與C++接口與混合編程討論小結(三)
發信站: BBS 水木清華站 (Tue Nov 2 22:26:04 1999)
第二章、
第一節、用c編寫mex程序[開篇]
發信人: fasiondog (亂了), 信區: MathTools
標 題: 用c編寫mex程序[開篇](轉信)
發信站: BBS 水木清華站 (Sun Apr 4 10:52:11 1999)
發信人: dodoo (虛懷), 信區: Programming
標 題: 用C編寫mex程序 [開篇]
用C編寫mex程序
大家都知道,matlab是一種解釋型的編程環境,也就是說,跟以前的basic一樣,是讀
一句執行一句的。這樣做可以很方便的實現編程過程中的交互,也免去了麻煩又耗時的
編譯過程。但凡事有一利必有一弊,matlab在執行時速度慢也就根源于此。在matlab里
tic
for i=1:10000
b(i)=a(10001-i);
end
怎么樣,是不是很慢?
你的程序里如果再多幾個這樣的循環,運行速度就可想而知了。
上面程序的功能是將向量a里的數據逆序賦給向量b。下面的程序可以實現相同的功能
tic
b=a(10000:-1:1);
為什么這個程序運行速度就這么快呢?這是因為matlab里的基礎矩陣運算函數,像轉
置,復制等等,都是以二進制程序的形式存在的,運行起來速度當然比解釋執行10000次
所以編matlab程序時,應該盡量避免用循環語句,而使用等效的矩陣運算。雖然這樣
但總是有的時候沒法找到對應的矩陣運算來等效,或編出來的程序復雜得讓人沒法修
簡單地說,mex程序就是根據一定的接口規范(mtlab提出的)編寫的一個dll,matla
比如我編了一個mex函數,名字叫max2.dll,那么只要把這個dll所在的目錄加到matlab
的搜索路徑里(用addpath),就可以像調用普通matlab函數一樣來調用它了。因為把
循環體放到了二進制程序中,執行速度快得多。
Mex文件既可以用c,也可以用fortran來編。因為我用的是c語言,所以下面的介紹都
是用c語言編寫mex文件的方法。如果你用的是fortran,請你自己去看Apiguide.pdf,里
面有詳細說明。
[開場說明]
我的論文里的程序大多是用matlab編的,因為方向是圖像處理,速度上的限制很大。
不得已,拿著apiguide.pdf啃了兩天,才算摸出點門道?,F在論文寫完了,想著這點經
驗也許有用,就不 淺薄,打算把它寫下來。因為還要
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -