當前位置:首頁 » 編程軟體 » matlab編譯教學視頻

matlab編譯教學視頻

發布時間: 2023-09-18 09:49:57

『壹』 matlab如何編譯

一般需要用 function定義的子文件可執行,只有一個主文件,並將M文件放在一起即可……下面有個示例希望對你有幫助

『貳』 matlab如何編譯mex文件

通過MEX文件可以在MATLAB中像調用內嵌函數一樣調用現有的使用C語言和Fortran等語言編寫的函數,實現了代碼重用,同時也能解決MATLAB循環效率低的缺點,提高MATLAB環境中數據處理的效率。
MEX文件的後綴名為 .mexw32
MEX文件的編寫和編譯需要兩個基本條件:一是必須按照MATLAB應用程序介面組件和相關工具,二是要有C語言或Fortran語言的編譯器。
需要對MATLAB系統進行設置,使MATLAB系統知道使用系統的哪一個C語言編譯器,以及其參數和路徑。
MEX文件系統設置:
>> mex –setup按照提示進行,最後出現Done…系統配置完畢。
C語言MEX文件的建立
C語言MEX文件的建立
1. MEX文件的結構
a) 計運算元程序
b) 入口子程序,void mexFunction(int nlhs, mxArray *plhs[],int nrhs,const mxArray *prhs[]){ /*用戶特定的代碼….*/ }
2. 創建timestwoalt.c
#include "mex.h"
void timestwo_alt(double *y, double x)
{
*y = 2.0*x;
}
void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[] )
{
double *y;
doublex;
/* 檢查參數 */
if (nrhs != 1) {
mexErrMsgTxt("One input argument required.");
} else if (nlhs > 1) {
mexErrMsgTxt("Too many output arguments.");
} else if (!mxIsNumeric(prhs[0])) {
mexErrMsgTxt("Argument must be numeric.");
} else if (mxGetNumberOfElements(prhs[0]) != 1 || mxIsComplex(prhs[0])) {
mexErrMsgTxt("Argument must be non-complex scalar.");
}
/* 為輸出參數創建變數 */
plhs[0] = mxCreateDoubleMatrix(1,1,mxREAL);
/*
為參數 x、y賦值,x為值,而y為指針
(由於MATLAB沒有值傳遞,所以用指針才能得到修改後的y值,
不然修改的是y的一個副本,為臨時變數,在函數返回時,y值沒有變化,
不能得到希望的結果)
*/
x = mxGetScalar(prhs[0]);
y = mxGetPr(plhs[0]);
/* 調用timestwo_alt 子函數 */
timestwo_alt(y,x);
}
3. 編譯鏈接C語言的MEX文件源程序,在MATLAB的控制窗口中輸入:mex timestwoalt.c生成一個名為timestwoalt.mexw32的MEX文件
4. 運行:在MATLAB的控制窗口中輸入
x=2;
y=timestwoalt(x)
輸出:y=4
MEX文件實現了一種C語言與MATLAB的介面,其實際的計算功能仍在C語言形式的計運算元程序中完成,而入口子程序的功能是檢查參數以匹配C語言的參數規范(how to?)。
當有C語言編寫的大型程序時,不必用MATLAB語言重新編寫,只要將此C語言程序作為一個計運算元程序,然後編寫一個入口子程序,完成參數的匹配,然後編譯成MEX文件即可。
MEX文件的另外一個功能是可以將MATLAB編程中的瓶頸問題,如多重循環等,將此類費時的指令用C語言實現,然後作必要的入口子程序,編譯成MEX文件,可以有效地提高MATLAB的效率。
S-函數創建器限制了C語言S-函數的功能:只能有一個輸入信號和一個輸出信號,而且只能處理double類型的數據!所以,可用性不大。

『叄』 MATLAB 7.0

附件說明

關於MATLAB的入門視頻有不少,但要稱的上完整、系統,恐怕很難有統一的標准。

我提供的是胡曉冬,董辰輝的《MATLAB從入門到精通》(人民郵電出版社,2010-06)一書的配套光碟,應該能滿足你的需求。內含217個實常式序文件,330分鍾的視頻講解。

圖書下載

ishare.iask.sina.com.cn/f/67219177.html

圖書簡介

本書以MATLABR2009a軟體為基礎,系統講解了MATLAB基本環境和操作方法。本書介紹了最新的MATLAB功能,並分章闡述了數據類型、數值計算、符號計算、編程基礎、可視化、Simulink、應用程序介面等內容,結合案例詳細講解了MATLAB語言的使用。本書還專門講解了實用的MATLAB編程技巧與數學建模應用等。
本書所帶的光碟是讀者學習MATLAB的好幫手,提供了全部示例的源程序,另外配有知識點和例題的視頻教程,可幫助讀者更好地理解書中的內容並更快地掌握MATLAB的使用方法。
本書內容豐富、貼近實戰應用,可作為高校學生系統學習MATLAB的書籍,也可以作為廣大科研和工程技術人員在工作中使用MATLAB的參考書。

圖書目錄

第1章MATLAB概述1
1.1MATLAB簡介1
1.2MATLAB主要功能2
1.2.1開發演算法和應用程序2
1.2.2分析和訪問數據3
1.2.3實現數據可視化3
1.2.4進行數值計算4
1.2.5發布結果和部署應用程序5
1.3MATLAB安裝與啟動5
1.3.1MATLAB的安裝5
1.3.2MATLAB的啟動與退出7
1.3.3Desktop操作界面簡介8
1.4CommandWindow運行入門8
1.4.1命令行的使用8
1.4.2數值、變數和表達式9
1.4.3命令行的特殊輸入方法11
1.4.4命令窗口的顯示格式12
1.4.5命令窗口常用快捷鍵與命令13
1.5CommandHistory窗口14
1.6CurrentDirectory窗口14
1.7WorkspaceBrowser和VariableEditor窗口15
1.7.1WorkspaceBrowser窗口15
1.7.2VariableEditor窗口15
1.8命令行輔助功能與FunctionBrowser16
1.9Help17
1.9.1HelpBrowser18
1.9.2命令窗口查詢幫助18

第2章矩陣和數組20
2.1矩陣的創建與組合20
2.1.1創建簡單矩陣20
2.1.2創建特殊矩陣21
2.1.3矩陣的合並22
2.2矩陣的尋訪與賦值23
2.2.1矩陣的標識23
2.2.2矩陣的尋訪24
2.2.3矩陣的賦值24
2.3進行數組運算的常用函數25
2.3.1函數數組運算規則的定義25
2.3.2進行數組運算的常用函數25
2.4查詢矩陣信息27
2.4.1矩陣的形狀信息27
2.4.2矩陣的數據類型27
2.4.3矩陣的數據結構28
2.5數組運算與矩陣運算28
2.6矩陣的重構29
2.6.1矩陣元素的擴展與刪除29
2.6.2矩陣的重構30
2.7稀疏矩陣31
2.7.1稀疏矩陣的存儲方式32
2.7.2稀疏矩陣的創建32
2.7.3稀疏矩陣的運算35
2.7.4稀疏矩陣的交換與重新排序36
2.7.5稀疏矩陣視圖38
2.8多維數組38
2.8.1多維數組的創建39
2.8.2多維數組的尋訪與重構41
2.9多項式的表達式及其操作44
2.9.1多項式的表達式和創建44
2.9.2多項式運算函數45

第3章數據類型47
3.1數值型47
3.2邏輯型47
3.2.1邏輯型簡介47
3.2.2返回邏輯結果的函數48
3.2.3運算符的優先順序50
3.3字元和字元串51
3.3.1創建字元串51
3.3.2字元串比較52
3.3.3字元串查找與替換53
3.3.4類型轉換54
3.3.5字元串應用函數小結55
3.4structure數組56
3.4.1structure數組的創建57
3.4.2structure數組的尋訪59
3.4.3structure數組域的基本操作60
3.4.4structure數組的操作61
3.5cell數組63
3.5.1cell數組的創建63
3.5.2cell數組的尋訪65
3.5.3cell數組的基本操作65
3.5.4cell數組操作函數66
3.6Map容器67
3.6.1Map數據類型介紹67
3.6.2Map對象的創建68
3.6.3查看Map的內容69
3.6.4Map的讀寫70
3.6.5Map中key和value的修改72
3.6.6映射其他數據類型73

第4章數值計算75
4.1因式分解75
4.1.1行列式、逆和秩75
4.1.2Cholesky因式分解77
4.1.3LU因式分解78
4.1.4QR因式分解79
4.1.5范數81
4.2矩陣特徵值和奇異值82
4.2.1特徵值和特徵向量的求取82
4.2.2奇異值分解84
4.3概率和統計85
4.3.1基本分析函數85
4.3.2概率函數、分布函數、逆分布函數和隨機數93
4.4數值求導與積分94
4.4.1導數與梯度94
4.4.2一元函數的數值積分95
4.4.3二重積分的數值計算97
4.4.4三重積分的數值計算97
4.5插值98
4.5.1一維數據插值98
4.5.2二維數據插值99
4.5.3多維插值100
4.5.4樣條插值100
4.6曲線擬合101
4.6.1最小二乘原理及其曲線擬合演算法101
4.6.2曲線擬合的實現102
4.7Fourier分析102
4.8微分方程104
4.8.1常微分方程104
4.8.2偏微分方程106

第5章符號計算110
5.1符號變數、表達式及符號方程110
5.1.1符號變數與表達式的創建110
5.1.2符號計算中的運算符和基本函數112
5.1.3創建符號方程113
5.2符號微積分113
5.2.1符號求導與微分113
5.2.2符號求極限115
5.2.3符號積分116
5.2.4級數求和116
5.2.5Taylor級數117
5.3符號表達式的化簡與替換117
5.3.1符號表達式的化簡118
5.3.2符號表達式的替換122
5.4符號可變精度計算125
5.5符號線性代數127
5.5.1基礎代數運算127
5.5.2線性代數運算128
5.6符號方程求解130
5.6.1求代數方程符號解130
5.6.2求代數方程組的符號解130
5.6.3求微分方程符號解132
5.6.4求微分方程組的符號解134
5.7符號積分變換134
5.7.1Fourier變換及其反變換134
5.7.2Laplace變換及其反變換135
5.7.3Z變換及其反變換136

第6章MATLAB編程基礎138
6.1M文件138
6.1.1M文件編輯器139
6.1.2M文件的基本內容140
6.1.3腳本式M文件142
6.1.4函數式M文件143
6.2流程式控制制143
6.2.1順序結構144
6.2.2if語句144
6.2.3switch語句146
6.2.4for循環146
6.2.5while循環147
6.2.6continue命令148
6.2.7break命令149
6.2.8return命令150
6.2.9人機交互命令150
6.3函數的類型152
6.3.1主函數152
6.3.2子函數152
6.3.3私有函數153
6.3.4嵌套函數154
6.3.5重載函數157
6.3.6匿名函數157
6.4函數的變數161
6.4.1變數類型161
6.4.2變數的傳遞162
6.5函數句柄164
6.5.1函數句柄的創建165
6.5.2函數句柄的調用165
6.5.3函數句柄的操作166
6.6串演算函數167
6.6.1eval函數167
6.6.2feval函數168
6.6.3inline函數169
6.7內存的使用170
6.7.1內存管理函數170
6.7.2高效使用內存的策略170
6.7.3解決「OutofMemory」問題172
6.8程序調試和優化173
6.8.1使用Debugger窗口調試173
6.8.2在命令窗口中調試176
6.8.3profile性能檢測178
6.9錯誤處理180
6.9.1使用try-catch語句捕捉錯誤180
6.9.2處理錯誤和從錯誤中恢復181
6.9.3警告183

第7章數據可視化185
7.1繪圖的基本知識185
7.1.1離散數據和離散函數的可視化185
7.1.2連續函數的可視化186
7.1.3可視化的一般步驟187
7.2二維圖形187
7.2.1基本繪圖函數187
7.2.2曲線的色彩、線型和數據點型189
7.2.3坐標、刻度和網格控制190
7.2.4圖形標識192
7.2.5雙坐標圖和子圖195
7.2.6雙軸對數圖形197
7.2.7特殊二維圖形197
7.3三維圖形203
7.3.1繪制三維曲線圖203
7.3.2繪制三維曲面圖203
7.3.3特殊三維圖形205
7.4三維圖形的高級控制207
7.4.1視點控制207
7.4.2顏色的使用208
7.4.3光照控制208

第8章圖像處理210
8.1圖像文件的操作210
8.1.1查詢圖像文件的信息211
8.1.2圖像文件的讀寫212
8.1.3圖像文件的顯示213
8.1.4圖像格式的轉換214
8.2圖像的幾何運算216
8.2.1圖像的平移216
8.2.2圖像的鏡像變換216
8.2.3圖像縮放217
8.2.4圖像的旋轉218
8.2.5圖像的剪切218
8.3圖像的正交變換219
8.3.1傅立葉變換219
8.3.2離散餘弦變換220
8.3.3Radon變換221
8.4MATLAB圖像增強222
8.4.1像素值及其統計特性222
8.4.2對比度增強224
8.4.3直方圖均衡化225
8.4.4空域濾波增強226
8.4.5頻域增強228

第9章圖形用戶界面(GUI)設計230
9.1句柄圖形對象230
9.1.1圖形對象230
9.1.2圖形對象句柄231
9.1.3圖形對象屬性的獲取和設置232
9.2GUIDE簡介234
9.2.1啟動GUI235
9.2.2Layout編輯器235
9.2.3運行GUI236
9.3創建GUI236
9.3.1GUI窗口布局236
9.3.2菜單的添加237
9.3.3控制項241
9.4CallBack函數245
9.4.1變數的傳遞245
9.4.2函數編寫246
9.5GUI設計示例248

第10章數據文件I/O254
10.1處理文件名稱254
10.2MATLAB支持的文件格式255
10.3導入向導的使用256
10.4MAT文件的讀寫257
10.4.1MAT文件的寫入257
10.4.2MAT文件的讀取258
10.5Text文件讀寫259
10.5.1Text文件的讀取259
10.5.2Text文件的寫入262
10.6Excel文件讀寫262
10.7音頻/視頻文件操作264
10.7.1獲取音頻/視頻文件的文件頭信息264
10.7.2音頻/視頻文件的導入與導出264

第11章MATLAB優化問題應用266
11.1MATLAB優化工具箱266
11.1.1MATLAB求解器267
11.1.2極小值優化269
11.1.3多目標優化275
11.1.4方程組求解276
11.1.5最小二乘及數據擬合277
11.2模式搜索法278
11.3模擬退火演算法280
11.3.1模擬退火演算法簡介280
11.3.2模擬退火演算法應用實例280
11.3.3關於計算結果281
11.4遺傳演算法282
11.4.1遺傳演算法簡介282
11.4.2遺傳演算法應用實例283
11.5OptimizationTool簡介285

第12章信號處理289
12.1信號處理基本理論289
12.1.1信號的生成289
12.1.2數字濾波器結構293
12.2IIR濾波器的MATLAB實現294
12.2.1IIR濾波器經典設計295
12.2.2IIR濾波器直接設計法301
12.2.3廣義巴特沃思IIR濾波器設計302
12.3FIR濾波器的MATLAB實現303
12.3.1FIR濾波器設計303
12.3.2fir1函數304
12.3.3fir2函數305

第13章Simulink模擬306
13.1Simulink簡介306
13.1.1Simulink功能與特點306
13.1.2Simulink的安裝與啟動307
13.2Simulink基礎309
13.2.1Simulink模型是什麼309
13.2.2Simulink模塊操作309
13.2.3Simulink信號線操作312
13.2.4Simulink對模型的注釋314
13.2.5Simulink常用的模型庫314
13.2.6Simulink模擬配置316
13.3Simulink動態系統模擬320
13.3.1簡單系統的模擬分析320
13.3.2離散系統的模擬分析322
13.3.3連續系統的模擬分析324
13.4Simulink模型中的子系統327
13.4.1子系統的建立327
13.4.2子系統的封裝328
13.5SimulinkS-函數331
13.5.1什麼是S-函數332
13.5.2S-函數的作用和原理332
13.5.3用M文件創建S-函數實例333

第14章應用程序介面336
14.1MATLAB應用程序介面介紹336
14.2MATLAB調用C/C++337
14.2.1MATLABMEX文件338
14.2.2C-MEX文件的使用341
14.3C/C++調用MATLAB引擎346
14.3.1MATLAB計算引擎概述346
14.3.2MATLAB計算引擎庫函數347
14.3.3C/C++調用MATLAB引擎348
14.4MATLAB編譯器352
14.4.1MATLAB編譯器的安裝和設置353
14.4.2MATLAB編譯器的使用354
14.4.3獨立應用程序356

第15章MATLAB基礎計算技巧365
15.1MATLAB數組創建與重構技巧365
15.2MATLAB數據類型使用技巧371
15.3MATLAB數值計算技巧373
15.4MATLAB文件讀取操作技巧375
15.5MATLAB繪圖技巧376

第16章MATLAB編程技巧379
16.1MATLAB編程風格379
16.1.1命名規則379
16.1.2文件與程序結構381
16.1.3基本語句382
16.1.4排版、注釋與文檔385
16.2MATLAB編程注意事項387
16.3內存的使用389
16.4提高MATLAB運行效率390
16.4.1提高運行效率基本原則390
16.4.2提高運行效率舉例392

第17章MATLAB在數學建模中的應用395
17.1MATLAB蒙特卡羅模擬395
17.1.1蒙特卡羅方法簡介395
17.1.2蒙特卡羅方法編程示例396
17.2MATLAB灰色系統理論應用398
17.2.1GM(1,1)預測模型簡介398
17.2.2灰色預測計算實例399
17.3MATLAB模糊聚類分析401
17.3.1模糊聚類分析簡介401
17.3.2模糊聚類分析應用示例402
17.4MATLAB層次分析法應用406
17.4.1層次分析法簡介406
17.4.2層次分析法的應用409

『肆』 如何將Matlab程序編譯成exe文件

我也是最近才搞定的這個問題,按下述步驟進行,就沒有問題,我已經運行成功,但是遇到你程序的bug的話,便會出現錯誤,關閉整個程序x0dx0a希望這些對你有用x0dx0ax0dx0a如何將MATLAB程序編譯成獨立可執行的程序?如何將編譯好的獨立可執行程序發布在沒有安裝MATLAB的電腦上?下面將一步步實現:x0dx0ax0dx0a一、生成獨立可執行的程序(exe文件)步驟x0dx0ax0dx0a 1、安裝編譯器。可有多種選擇,matlab自帶了一個LCC,推薦使用VC++6.0,我基於VS 2003實現。x0dx0a 2、設置編譯器。在matlab命令行輸入mbuild _setup以及mex _setup,選擇安裝的c編譯器。x0dx0a 3、調用編譯器。此處使用MATLAB下的一個GUI平台deploytool下完全實現。在命令窗口輸入deploytool即可看到。具體使用方法請Help。x0dx0a當然,也可以輸入mcc -m filaname, filaname為要轉成exe的m文件;x0dx0a註:在以前的版本中,用編譯命令mcc -B sglcpp filaname;自2006的版本後,替換為mcc -mfilaname;x0dx0a 4、安裝\toolbox\compiler\deploy\win32目錄下的MCRInstaller。x0dx0ax0dx0a二、脫離matlab運行可執行程序x0dx0aMCR是由matlab的運行環境,佔用不到300M的對於用不同matlab版本生成的exe文件,MCR版本也會有不同,因此,在程序打包時,最好將相應版本的MCR一起打包。MCR環境的設置文件存放目錄如下:x0dx0a \toolbox\compiler\deploy\win32x0dx0a文件名為MCRInstaller.exe。可將其拷貝到自己的文件夾中,(7.0以前的版本是mglinstaller.exe)。x0dx0a在MATLAB里運行可執行程序的辦法是在前面加一個!,比如:!picshow,後綴名可有可無。x0dx0a在其它沒有安裝matlab的機器上運行exe文件前:x0dx0a首先安裝matlab的運行環境。在同一機器上可以並存不同版本的matlab環境(換句話說不同版本不兼容)。x0dx0a其次是要將「MCRinstaller.exe安裝目錄\runtime\win32」這個路徑添加到該計算機的環境變數中,通常是自動載入。x0dx0a如果沒有,也可手動安裝,添加的方法是:x0dx0a右擊「我的電腦」「屬性」「高級」「環境變數」「添加」指定一個變數名,然後將上述路徑復制到裡面就可以了。x0dx0a註:在安裝過程中會彈出讓安裝Microsoft.NETFramework可以不用安裝。x0dx0a最後就是將編譯生成的相相關文件拷貝到同一目錄下,雙擊即可運行。x0dx0a問題:目前此方法可完全運行在沒有安裝MATLAB以及C/C++的電腦上,但是如果是在AMD的CPU可以運行,但是不會出現任何MATLAB編譯的界面。x0dx0a美中不足就是,運行的時候dos的那個黑色地窗口一直存在。下面將實現去除黑屏的辦法:x0dx0ax0dx0a消除運行MATLAB生成的exe程序的dos黑屏的辦法x0dx0a基於MATLAB生成exe文件後,每次運行都存在dos黑屏的問題,現在可以通過以下方法解決:x0dx0a方法一: 在命令窗口輸入:x0dx0acd(prefdir) x0dx0aedit compopts.batx0dx0a在打開的文件最後添加以下語句:x0dx0ax0dx0aA.VC環境下:x0dx0ax0dx0a set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup x0dx0ax0dx0aB.LCC環境下:x0dx0a set LINKFLAGS=%LINKFLAGS% -subsystemwindows

『伍』 如何將MATLAB程序編譯成exe文件

1.設置編譯器:

在確定安裝好Matlab
Compiler後,還需要對Compiler進行適當的配置,方法是在Matlab命令窗口輸入:
mbuild –setup, 按提示選擇matlab自帶編譯器LCC。

2.將程序編譯成exe文件:
(1)如果全是M文件
調用格式:
Mcc -m mainmfile mfile1 mfile2 ……
mfileN;
第一個mainmfile 為主程序(main
function),其餘均為需要的M文件。
(2)如果是GUI文件
例如mygui.fig 和mygui.m,編譯這個GUI的命令是:
>>mcc -m
mygui
(3)如果既有GUI文件,又有M文件(誰是主程序,誰放在前)
①>>mcc -m mygui mfile
(mygui是主程序,即mygui中用到mfile.m);
②>>mcc -m mfile
mygui(mfile是主程序,即mfile.m中用到mygui)。
(4)如果GUI用到ActiveX控制項
>>mcc -m mygui -a
myactivex

myactivex
是ActiveX控制項的文件名。
編譯完成後,可通過雙擊生成.exe文件;或者在matlab命令行輸入帶「!」的命令:
>>! mainmfile
(主程序文件名)

3.編譯後的文件可以先打包成一個.exe文件,然後再用隱藏DOS窗口的軟體將該.exe文件彈出的DOS窗口隱藏。
(1)打包軟體很多。如MoleBox Pro;
(2)隱藏DOS窗口的方法或軟體也很多,在各大Matlab論壇上都有,例如:Matlab中文論談。
下面介紹兩種隱藏方法:
方法一: 在命令窗口輸入:
cd(prefdir)
edit compopts.bat
根據你使用的環境,在打開的文件最後添加以下語句:
A.VC環境下:
set
LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
B.LCC環境下:
set LINKFLAGS=%LINKFLAGS%
-subsystemwindows
C. Borland:

set LINKFLAGS=%LINKFLAGS% -aa

保存以後,再重新編譯m文件,生成的exe文件運行起來就沒有dos窗口了。

方法二:使用suppress工具,點擊下列地址下載(具體操作裡面有說明)。
http://www.mathworks.com/matlabcentral/fx_files/3909/1/suppress.zip

方法一生成的exe再到沒有任何安裝MATLAB的機子上運行也不會有黑屏了。
方法二的缺點就是要同時存在您生成的exe以及supress.exe,必須在同一目錄下。

4.如果目標計算機上沒有安裝該版本的matlab,上面生成的exe文件不能正常運行,解決方法有二:
(1)將該執行文件所需要的dll文件都復制到目標計算機上;
(2)在目標計算機上安裝MCRinstaller.exe。(該文件位於matlab安裝目錄下的
\toolbox\compiler\deploy\win32內)。
將「MCRinstaller.exe安裝目錄\runtime\win32」這個路徑添加到目標計算機的環境變數中,通常是自動載入。
如果沒有,也可手動安裝,添加的方法是:
右擊「我的電腦」「屬性」「高級」「環境變數」「添加」指定一個變數名,然後將上述路徑復制到裡面就可以了。
註:在安裝過程中會彈出讓安裝Microsoft.NETFramework可以不用安裝。
最後就是將編譯生成的相相關文件拷貝到同一目錄下,雙擊即可運行。

『陸』 MATLAB程序如何編譯產生DLL

把一個簡單的m代碼編譯成C++介面的DLL,然後在C++程序中調用。為沖明了簡單起見,這里的C++程序是一個Win32 Console程序,而不是Windows圖形界面的程序,不過不妨礙我們的討論。x0dx0ax0dx0a下面是這個例子用到的m代碼。它定義了一個名為myadd2的函數x0dx0ax0dx0afunction [y,z] = myadd2(a, b)x0dx0ax0dx0a% mmy function, just to demonstrate the ideax0dx0ax0dx0ay = a+b;x0dx0ax0dx0az = a+2*b;x0dx0ax0dx0aendx0dx0a復制代碼x0dx0a首先把這個函數編譯成C++介面的DLL。為此,我們需要先設置MATLAB編譯器。衫判悶具體做法是在MATLAB命令行執行「mbuild -setup」。然後用下面這行命令把myadd2函數編譯成一個C++介面的DLL:x0dx0ax0dx0amcc -W cpplib:libmyadd2 -T link:lib myadd2x0dx0a復制代碼x0dx0a結果,我們將會得到包含libmyadd2.dll,libmyadd2.ctf,libmyadd2.h,libmyadd2.lib等在內的一些文件。接下來我們只需要這四個文件。x0dx0ax0dx0a然後在VS2005中創建一個Win32 Console的VC++工程,我在測試時取名為testmyadd2_r2007b。把以上四個文件拷貝到VC++工程的源代碼所在目錄。x0dx0ax0dx0a接下來設置VC++,讓它能找到MATLAB介面函數的定義及連接庫函數。可以有兩種或彎設置方式:一種是改VS2005中關於VC++的設置,這樣的好處是每個新的工程都能自動獲得這個設定;而另一種是只改當前工程的設置,也就是設置只對該工程有效。這里用後一種方式。x0dx0ax0dx0a在VS2005中打開工程testmyadd2_r2007b,選擇菜單「Project-->;Properties,在出來的對話框上,把MATLAB提供的include路徑加到VC++的頭文件搜索路徑。x0dx0ax0dx0a然後把相應的lib所在目錄加到linker的額外搜索路徑上x0dx0ax0dx0a接下來,告訴VC++,我們的這個程序需要連接到另外兩個額外的庫函數:libmyadd2.lib和mclmcrrt.lib。中間用空格隔開x0dx0ax0dx0a最後則是程序代碼。這個程序只有一個main函數,其完整代碼附在下面給大家參考。x0dx0ax0dx0a#include "stdafx.h"x0dx0ax0dx0a#include x0dx0ax0dx0a#include "mclmcr.h"x0dx0ax0dx0a#include "mclcppclass.h"x0dx0ax0dx0a#include "libmyadd2.h"x0dx0ax0dx0aint _tmain(int argc, _TCHAR* argv[])x0dx0ax0dx0a{x0dx0ax0dx0astd::cout << "Hello world!" << std::endl;x0dx0ax0dx0a /* Initialize the MCR */ x0dx0ax0dx0a if( !mclInitializeApplication(NULL,0) ) x0dx0ax0dx0a { x0dx0ax0dx0a std::cout << "Could not initialize the application!" << std::endl;x0dx0ax0dx0a return -1; x0dx0ax0dx0a } x0dx0ax0dx0a// initialize libx0dx0ax0dx0a if( !libmyadd2Initialize())x0dx0ax0dx0a {x0dx0ax0dx0a std::cout << "Could not initialize libmyadd2!" << std::endl;x0dx0ax0dx0a return -1; x0dx0ax0dx0a }x0dx0ax0dx0atryx0dx0ax0dx0a {x0dx0ax0dx0a // declare and initialize ax0dx0ax0dx0a mwArray a(2, 2, mxDOUBLE_CLASS);x0dx0ax0dx0a double *aData;x0dx0ax0dx0a aData = new double[4];x0dx0a復制代碼x0dx0a本帖隱藏的內容x0dx0a int i;x0dx0ax0dx0a for( i=0; i<4; ++i)x0dx0ax0dx0a {x0dx0ax0dx0a aData = 1.0*i;x0dx0ax0dx0a }x0dx0ax0dx0a // print outputx0dx0ax0dx0a std::cout << "a = " << std::endl;x0dx0ax0dx0a std::cout << aData[0] << ",\t" << aData[1] << std::endl;x0dx0ax0dx0a std::cout << aData[2] << ",\t" << aData[3] << std::endl;x0dx0ax0dx0aa.SetData(aData, 4);x0dx0ax0dx0a// declare and initialize bx0dx0ax0dx0a mwArray b(2, 2, mxDOUBLE_CLASS);x0dx0ax0dx0a b(1,1) = 11.;x0dx0ax0dx0a b(1,2) = 12.;x0dx0ax0dx0a b(2,1) = 21.;x0dx0ax0dx0a b(2,2) = 22.;x0dx0ax0dx0amwArray y(2, 2, mxDOUBLE_CLASS);x0dx0ax0dx0a mwArray z(2, 2, mxDOUBLE_CLASS);x0dx0ax0dx0a// call the functionx0dx0ax0dx0a myadd2(2, y, z, a, b);x0dx0ax0dx0a// data from mwArray to C++ objectsx0dx0ax0dx0a// allocate outputsx0dx0ax0dx0a double *yData, *zData;x0dx0ax0dx0a yData = new double[4];x0dx0a復制代碼x0dx0ax0dx0a if( yData == NULL )x0dx0ax0dx0a {x0dx0ax0dx0a std::cout << "Failed to allocate memory for yData!" << std::endl;x0dx0ax0dx0a return -1;x0dx0ax0dx0a }x0dx0ax0dx0azData = new double[4];x0dx0ax0dx0a if( zData == NULL )x0dx0ax0dx0a {x0dx0ax0dx0a std::cout << "Failed to allocate memory for zData!" << std::endl;x0dx0ax0dx0a return -1;x0dx0ax0dx0a }x0dx0ax0dx0a// data from mwArray to C++x0dx0ax0dx0a y.GetData(yData, 4);x0dx0ax0dx0a z.GetData(zData, 4);x0dx0ax0dx0a// print outputx0dx0ax0dx0a std::cout << "y = " << std::endl;x0dx0ax0dx0a std::cout << yData[0] << ",\t" << yData[1] << std::endl;x0dx0ax0dx0a std::cout << yData[2] << ",\t" << yData[3] << std::endl;x0dx0ax0dx0astd::cout << "z = " << std::endl;x0dx0ax0dx0a std::cout << zData[0] << ",\t" << zData[1] << std::endl;x0dx0ax0dx0a std::cout << zData[2] << ",\t" << zData[3] << std::endl;x0dx0ax0dx0a// deallocate memoryx0dx0ax0dx0a delete [] aData;x0dx0ax0dx0a delete [] zData;x0dx0ax0dx0a delete [] yData;x0dx0ax0dx0a }x0dx0ax0dx0a catch( const mwException& e)x0dx0ax0dx0a {x0dx0ax0dx0a std::cerr << e.what() << std::endl;x0dx0ax0dx0a}x0dx0ax0dx0a // terminate the libx0dx0ax0dx0a libmyadd2Terminate();x0dx0ax0dx0a// terminate MCRx0dx0ax0dx0a mclTerminateApplication();x0dx0ax0dx0areturn 0;x0dx0ax0dx0a}

熱點內容
網頁和資料庫 發布:2024-11-19 04:39:16 瀏覽:786
sql自動編號插入 發布:2024-11-19 04:39:16 瀏覽:750
使用代理伺服器地址和埠怎麼填 發布:2024-11-19 04:33:33 瀏覽:865
discuz資料庫操作 發布:2024-11-19 04:33:22 瀏覽:85
什麼是db資料庫 發布:2024-11-19 04:31:17 瀏覽:552
安卓os耗電過多是怎麼回事 發布:2024-11-19 04:14:56 瀏覽:313
dcs數據存儲多長時間 發布:2024-11-19 04:10:38 瀏覽:950
我的世界手機版租賃服顯示無法連接至伺服器 發布:2024-11-19 04:07:19 瀏覽:55
java起源 發布:2024-11-19 04:02:18 瀏覽:373
才辦的醫保卡密碼是多少 發布:2024-11-19 03:47:57 瀏覽:344