Matlab與VC混合程式設計

2021-09-30 04:34:12 字數 1991 閱讀 3629

眾所周知,

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 是物件導向的,它們的資料型別和編譯方式存在差異。遇到的...