cmatlab混合編程
A. Matlab混合編程之使用C\UDP動態鏈接庫傳輸數據的秘訣
方法/步驟
1、啟動兩個matlab軟體,分別載入Dll
loadlibrary('CSForUDLL.dll','CSForUDLL.h')
2、libfunctions
CSForUDLL
-full
查看一下Dll里的所有函數
3、在一個matlab運算add_server函數,作為啟動Server端
我寫的dll第一個參數為要發送的數字
calllib('CSForUDLL','add_server',2,2,0)
之行結束會發現Server端在一直等待。
4、在另一個matlab上運行add_client函數,作為啟動Client端
同理,我的dll第一個參數用來發送數字;
calllib('CSForUDLL','add_client',2,2,0)
5、回車運行,會發現返回一個數字。
這個數字是從Server端發送過來的。
6、再看一下Server端,收到Client發送的數字1
。
B. matlab與c/c++混合編程,急!
目前常用的的是4.5版本,包含matlab.h頭文件,和v4501v.dll
ago4501兩個動態庫即可。
具體可參考matcom幫助或者留言給我
C. matlab混合編程怎麼設置環境
脫離MATLAB工作環境,實現MATLAB與VisualBasic語言的混合編程
以下討論是在MATLAB7.0軟體和vc++6.0軟體環境中進行:
一、將MATLAB的.m文件編譯成.exe文件,實現MATLAB與Visual Basic語言的混合編程
1、將 \MATLAB7\toolbox\compiler\deploy\matlabrc.m 中的81行 set_param(0,'PaperType',defaultpaper)
和82行set_param(0,'PaperUnits',defaultunits)
注釋掉,或者乾脆刪掉,否則,在沒有安裝MATLAB的機子上運行MATLAB與VisualBasic語鏈世培言混合編成的程序時,會出現:「Undefinedcommand/function 'set_param'」的錯誤。
2、在Matlab7 的命令窗口運行下列命令:rehash toolboxcache
完成工具箱載入和更新。
3、在Matlab7 的命令窗口運棚唯行下列命令:
Mcc –m ***.m
將MATLAB的.m文件(M文件必須以Function開始,即必須是函數文件)編譯成.exe文件,將編譯生成的.ctf文件和.exe文件拷貝到VB工程的目錄中,他們是脫離matlab環境運行必返雀需的文件;
4、在VB工程中用下列語句對MATLAB的.m文件編譯成的.exe文件進行調用:
lTask = Shell("rt2.exe",vbHide)
hProc= OpenProcess(PROCESS_QUERY_INFORMATION, False, lTask)
IflTask = 0 Then MsgBox "程序執行失敗"
Do
GetExitCodeProcess hProc, lExit
DoEvents
LoopWhile lExit = STILL_ACTIVE
5、將VB工程進行打包,打包時,要將在MATLAB中編譯生成的.ctf文件和.exe文件添加到VB工程包中,他們是脫離matlab環境運行必需的文件;
6、將打包好的VB工程安裝包拷貝到客戶計算機中,並將matlab7\toolbox\compiler\deploy\win32下的MCRInstaller.exe程序也一起拷貝到客戶計算機中。
7、在客戶計算機中,運行程序:MCRInstaller.exe,將matlab compiler runtime安裝到客戶計算機中。注意:安裝目錄必須位於它所在的文件夾;
8、運行VB工程安裝包中的setup程序,進行VB工程的程序安裝;
至此,在客戶機中,即可正常運行MATLAB與Visual Basic語言混合編成的程序。
注意事項:
1、在VB工程所在目錄中,不能有其它的.dll文件存在,否則在客戶機中運行MATLAB與Visual Basic語言混合編成的程序時,會出現下列錯誤提示:
「Warning:Failed to startthe Java Virtual machine.」
「Warning:Disabling Javasupport.」
「Undefined function orvariable 『matlabrc』.」
二、將MATLAB的.m文件編譯成.dll文件,實現MATLAB與Visual Basic語言的混合編程
1、將 \MATLAB7\toolbox\compiler\deploy\matlabrc.m 中的81行 set_param(0,'PaperType',defaultpaper)
和82行set_param(0,'PaperUnits',defaultunits)
注釋掉,或者乾脆刪掉,否則,在客戶機中運行MATLAB與Visual Basic語言混合編成的程序時,會出現:「Undefined command/function 'set_param'」的錯誤。
2、在Matlab7 的命令窗口運行下列命令:rehash toolboxcache
完成工具箱載入和更新。
3、安裝vc++6.0軟體,為Matlab編譯器的安裝和配置做准備;
4、在Matlab7 的命令窗口運行下列命令:
mbuild –setup
對Matlab的編譯器進行安裝和配置;
5、在Matlab中創建COM組件
用Matlab COM生成器創建COM組件,包括4個步驟,即創建工程、管理m文件、生成組件、打包和分發組件。
在Matlab中創建COM組件步驟如下:
(1) 創建工程。在Matlab命令窗中鍵入comtool命令,調用Matlab編譯器,打開Matlab COM Build主窗口。在該窗口中,選擇File→New Project,創建一個新的工程,在此對話框中對新工程進行設置,輸入組件名和類名,選擇合適的編譯器。
(2) 管理m文件。單擊「AddFile」按鈕,添加編寫好的M函數文件(M文件必須以Function開始,即必須是函數文件)。
(3) 生成組件。使用Build--àCom object菜單,創建COM組件,將MATLAB的.m文件編譯成.dll文件。
(4)打包和分發組件:編譯成功並通過測試後,就可以把有關文件打包和分發給目標器。單擊 「Component」→」Package Component」,創建自解壓可執行程序。注意:在使用Component--àPackageComponent菜單,生成.exe文件時,要將「includeMCR」前的選擇框選中,使生成的.exe文件中能包含MCRInstaller.exe程序。
6、將編譯生成的.ctf文件和.dll文件以及.exe文件拷貝到VB工程的目錄中;
7、創建VB工程並調用COM組件新建「標准EXE」工程,進入VB編程環境,在「工程」菜單中單擊「引用」選項, 在列表中選中第5步中生成的這些組件,以及添加MWComUtil 7.0 Type Library,單擊「確定」按鈕。
在VB工程引用這些組件後,需按照以下步驟來調用Matlab文件:
Dim rt2 As rt2_1.rt2_1class '聲明一個COM組件
Set rt2 = New rt2_1.rt2_1class
Call rt2.rt2 '執行rt2_1_1_0.dll文件
8、將VB工程進行打包,打包時,要將在MATLAB中編譯生成的.ctf文件和.dll文件以及.exe添加到VB工程包中;
9、在客戶計算機中,運行第5步中生成的.exe程序,對第5步中生成的.dll動態鏈接庫進行注冊,並自動運行MCRInstaller.exe程序,將matlab compiler runtime安裝到客戶計算機中。
10、將打包好的VB工程安裝包拷貝到客戶計算機中,運行VB工程安裝包中的setup程序,進行VB工程的程序安裝;
至此,在客戶機中,即可正常運行MATLAB與Visual Basic語言混合編成的程序。
注意事項:
1、VB編譯生成的MATLAB與Visual Basic語言混合編成的exe應用程序不能簡單的移植,必須要打包,在打包時應帶上dll文件,然後將打包好的VB工程安裝包拷貝到客戶機中,運行VB工程安裝包中的setup.exe安裝程序,進行VB工程的安裝,VB工程安裝完成後,再在客戶機中,運行第5步中生成的.exe程序,就可以避免出現下列各種錯誤提示:
(1)「Warning:Failedto start the Java Virtualmachine.」
「Warning:Disabling Javasupport.」
「Undefined function orvariable 『matlabrc』.」
(2)「Automation錯誤」或者「自動化錯誤」
(3)「運行時錯誤』429』:ActiveX部件不能創建對象」
(4)「MCR instance isnot available.」
2、在VB工程所在目錄中,除了包含第5步中生成的.dll動態鏈接庫文件外,不能有其它的.dll文件存在,否則在客戶機中運行MATLAB與Visual Basic語言混合編成的程序時,會出現下列錯誤提示:
「Warning:Failed to startthe Java Virtual machine.」
「Warning:Disabling Javasupport.」
「Undefined function orvariable 『matlabrc』.」
3、如果直接將Vb工程程序拷貝到客戶機中,而不是通過安裝Vb工程程序,來運行MATLAB與VisualBasic語言混合編成的程序時,會出現:「Automation錯誤」或者「自動化錯誤」的錯誤提示,這時可以通過下列方法之一解決:
(1)在客戶機中運行第5步中生成的.exe程序,對第5步中生成的.dll動態鏈接庫進行注冊,就可以解決「Automation錯誤」或者「自動化錯誤」引起的程序運行異常。
(2)在客戶機中直接運行regsvr32.exe程序,對第5步中生成的.dll動態鏈接庫進行注冊,也可以解決「Automation錯誤」或者「自動化錯誤」引起的程序運行異常。
4、如果在客戶機中,沒有運行第5步中生成的.exe程序,對第5步中生成的.dll動態鏈接庫進行注冊,那麼在客戶機中運行MATLAB與Visual Basic語言混合編成的程序時,就會出現:「運行時錯誤』429』:ActiveX部件不能創建對象」的提示,或者出現:「Automation錯誤」或者「自動化錯誤」的錯誤提示。
5、如果在客戶機中運行MATLAB與Visual Basic語言混合編成的程序時,出現:「MCR instance isnot available.」的錯誤提示時,可以通過將打包好的VB工程安裝包拷貝到客戶計算機中,運行VB工程安裝包中的setup程序,進行VB工程的程序安裝,就可以解決這種錯誤。
D. 哪位大俠知道vc和matlab混合編程
MATLAB 與Visual C++結合的方法有多種,但其實用程度與范圍不同。目前主要有以下三種方式。
1. 通過Matlab引擎(Engine)
採用客戶機/伺服器(Client/Service)的計算模式,通過windows的ActiveX通道和MATLAB進行結合。MATLAB引擎採用客戶機和伺服器計算方式,提供了一組Matlab API函數,用戶不必關心Matlab引擎是如何實現的,只要調用這些函數即可。正是通過這些API函數實現應用程序進程之間的傳遞函數,從而實現Matlab與VC的混合編程。具體應用中,往往在VC中設計程序框架, VC的C語言或C++語言的程序作為前端客戶機,它向Matlab引擎傳遞命令和數據信息,通過調用MATLAB引擎在後台與MATLAB伺服器建立連接,實現動態通信。這種處理方法不要求鏈接整個Matlab,只需嵌入必要的Matlab引擎庫,節省了大量的系統資源,使應用程序整體性能更好,處理效率更高,但這種混合編程的方法需要MATLAB在後台適時運行不能脫離Matlab環境,否則影響了程序的通用性,因此這種方法在實際開發過程中很少採用。
2. 通過DLL實現混合編程
DLL是動態鏈接庫的英文縮寫,是一個可執行的二進制文件。把很多通用的功能放在DLL 中,可供多個應用程序調用,而不是每個應用程序在連接時都要增加一個庫中目標代碼的拷貝。通過Matlab自帶的Compiler編譯器,可以把由Matlab編寫的m 函數文件編譯成動態鏈接庫(dl1)。或者通過Matlab提供的組件功能,運用VC+十向導自動生成m文件的動態鏈接庫。在VC程序中調用封裝的函數,實現數值演算法的運用。這種方法只需在開發和發布中包含其生成的動態庫就可以了,可以使程序脫離Matlab可以整體減少文件外部存儲空間的佔有量,並實現了代碼共享。
3.使用COM技術實現混合編程
COM技術是一種應用廣泛、方便靈活的方法,是利用MATLAB提供的Deploy Tool工具實現MATLAB與C/C++的混合編程。COM給軟體開發人員提供了一種共享二進制代碼的方法,這種共享並不局限於某種編程語言。
E. 如何將MATLAB文件與c#混合編程
沒有做過這方面的編程,不過之前在雜志上看過相關的文章,是基於MatlAB與VB的混合編程,由於MatlAB不能開發可執行文件,程序必須在其環境運行,MatlAB提供了與其他高級語言的介面,以實現它們的混合編程。
文章介紹了兩種介面方法:引入1.Matrix
VB
2.藉助Matcom將MatlAB函數轉換為VB可調用的DLL文件。具體方法你可以查看相關資料
F. matlab與C++混合編程(高手請進)
源代碼:
#include "D:\extern\include\mat.h"
void main() {
MATFile *pMF; // mat文件
mxArray *pA; // 矩陣指針
double *A; // 數據指針
int i, j;
// 打開一個test.mat文件,只寫,如果不存在就新建,否則刪除重建
pMF = matOpen("test.mat", "w");
// 新建一個12*4的矩陣只有實部(在MATLAB里矩陣都是復矩陣)
pA = mxCreateDoubleMatrix(12, 4, mxREAL);
// 給這個矩陣命名為x
mxSetName(pA, "x");
// 讓指針Array指向這個矩陣的數據
A = mxGetPr(pA);
// 在VC里數組是按行排放的,在MATLAB里矩陣是按列排放的,)
for (i = 0; i < 12; i++)
for (j = 0; j < 4; j++)
A[j * 12 + i] = i + 0.001 * j;
// 將矩陣寫到文件test內
matPutArray(pMF, pA);
// 釋放矩陣空間
mxDestroyArray(pA);
// 關閉文件
matClose(pMF);
}
G. vc matlab 混合編程,哪種方式最好
調用matlab引擎:是要求MATLAB作為VC的一個後台來調用,從本質來說還是啟慶帶在MATLAB中差升運行的程序;
基於matcom:可以脫離MATLAB的環境,但是貌悄蘆似有一部分MATLBA中的函數不能完全調用;而且方法簡單;
基於COM的:這個我不太會也沒有試過;
我推薦將MATLAB的程序編譯成動態庫在VC中調用,這也可以完全脫離MATLAB的環境,可以完美調用
H. matlab VC混合編程調用神經網路工具箱
調用MATLAB Engine雖然可以實現對神經網路工具箱的功能,但是因為這種方法是基於C/S模式的,效率很低,而且需要在matlab下實現其功能,無法脫離matlab直接運行,所以,基於這個原因,我放棄了利用MATLAB Engine來實現混合編程。利用C++數學庫雖然可以脫離MATLAB直接運行,但是C++數學庫並不支持神經網路工具箱,所以,無法實現基於神經網路的混合編程。利用mcc命令雖然可以直接生成.exe文件,並可以脫離MATLAB在VC++中直接運行,但是因為其自身的諸多缺點,這種方法並不能編譯神經網路函數為C++文件,所以,也無法勝任這個任務。 最後,只有COM組件這一個辦法了,由於COM組件技術的強大功能,利用matlab的COM Builder工具可以實現脫離matlab的混合編程,並成功的調用了神經網路工具箱。