眾所周知,
matlab是一套功能非常強大的商業數學軟體,從訊號處理,語音處理,資料採集,數值運算,影象處理,到電子**,金融分析等等,幾乎在各個工業領域,他都已經得到了廣泛應用,同時也取得了巨大的成功。
但是,由於matlab是用一種指令碼語言,他的解釋是逐行執行的,程式中所有的變數都是用mxarray來實現的,所以為了保證通用性,它的執行效率非常低,這就是我們常常看到的:在開發一些複雜的演算法時,通常會發現程式執行得特別慢,雖然mathworks公司已經在竭力提高m指令碼檔案(script files)的運算速度,但目前為止效果仍然不能和實現同樣功能的可執行程式相比。而且m指令碼檔案是不能脫離matlab這個應用程式環境,這就大大制約了程式的可移植性和通用性。
本文的目的正是基於上述考慮,介紹如何利用matlab提供的c/c++編譯器,將m檔案編譯成可執行的應用程式。編譯環境是:ms vc++ 6.0和matlab6.5。
一、
matlab中的操作1
.沒有使用圖形相關的函式
由於matlab的編譯器只能對函式m檔案進行編譯,所以如果原來的程式是指令碼程式應改寫成函式形式。舉例如下:
建立乙個m檔案test1.m,內容如下:
function y = test1(n)
y = 1 ;
for i = 1 : n
y = y * i ;
end用如下命令對其進行編譯:
mcc
–t –l cpp –h test1.m
(如果程式由多個m檔案組成,在編譯命令中只需要指定主檔案即可,mcc會自動查詢相應的m檔案進行編譯)編譯完成後會得到與m檔名相對應hpp和cpp檔案,本例中是test1.hpp和test1.cpp。2.
使用了圖形相關的函式
建立乙個m檔案test2.m,內容如下:
function test2
plot(rand(10));
用如下命令編譯:
mcc
–p –b sglcpp test2.m
(如果程式由多個檔案組成,處理方法同上)
編譯完成後得到與m檔名相對應的hpp和cpp檔案、乙個主函式檔案、bin目錄中的
兩個fig
檔案以及乙個exe檔案。我們需要的只是與m檔案相對應的hpp檔案、cpp檔案以及bin目錄中的兩個fig檔案,本例中是test2.hpp,test2.cpp以及bin目錄中的figuremenubar.fig和figure*******.fig。
二、vc中的操作
相比matlab中的操作,vc中需要設定眾多的編譯選項,顯得比較複雜。另外,vc中可選的工程型別比較多,本文將說明matlab編譯得到的源程式在如下工程型別中的使用ll
l其實在這幾種型別的工程中大部分的操作都是相同的,本文先描述相同的操作,再說明不同的部分。
1.用vc建立相應型別的工程,把第一步中提到的源程式拷貝到工程所在目錄中。
2.選擇選單tools-options-在屬性頁中選擇directories-下拉框中選擇include files,在其最後加入
%matlab6p5%/extern/include/cpp
%matlab6p5%/extern/include
其中%matlab6p5%為matlab的安裝路徑,如下圖所示:
再在下拉框中選擇library files,在最後加入
%matlab6p5%/extern/lib/win32/microsoft/msvc60
%matlab6p5%/extern/lib/win32
如下圖所示:
Matlab與VC混合程式設計
眾所周知,matlab是一套功能非常強大的商業數學軟體,從訊號處理,語音處理,資料採集,數值運算,影象處理,到電子 金融分析等等,幾乎在各個工業領域,他都已經得到了廣泛應用,同時也取得了巨大的成功。但是,由於matlab是用一種指令碼語言,他的解釋是逐行執行的,程式中所有的變數都是用mxarray來...
Matlab與VC混合程式設計
眾所周知,matlab是一套功能非常強大的商業數學軟體,從訊號處理,語音處理,資料採集,數值運算,影象處理,到電子 金融分析等等,幾乎在各個工業領域,他都已經得到了廣泛應用,同時也取得了巨大的成功。但是,由於matlab是用一種指令碼語言,他的解釋是逐行執行的,程式中所有的變數都是用mxarray來...
matlab與VC混合程式設計出現的問題
今天是週三,一周過去的這三天一直在正matlab和vc6混合程式設計的問題。問題最終解決,得到的經驗教訓也不少。網上有很多混合程式設計的資料,首先要弄清楚選擇哪種方式,這方面後續會總結。在vc6中c和c 呼叫matlab不同,c是面向過程的,c 是物件導向的,它們的資料型別和編譯方式存在差異。遇到的...