導航:首頁 > 編程語言 > 調用matlab混合編程

調用matlab混合編程

發布時間:2022-09-23 14:13:09

① matlab VC混合編程調用神經網路工具箱

調用MATLAB Engine雖然可以實現對神經網路工具箱的功能,但是因為這種方法是基於C/S模式的,效率很低,而且需要在matlab下實現其功能,無法脫離matlab直接運行,所以,基於這個原因,我放棄了利用MATLAB Engine來實現混合編程。利用C++數學庫雖然可以脫離MATLAB直接運行,但是C++數學庫並不支持神經網路工具箱,所以,無法實現基於神經網路的混合編程。利用mcc命令雖然可以直接生成.exe文件,並可以脫離MATLAB在VC++中直接運行,但是因為其自身的諸多缺點,這種方法並不能編譯神經網路函數為C++文件,所以,也無法勝任這個任務。 最後,只有COM組件這一個辦法了,由於COM組件技術的強大功能,利用matlab的COM Builder工具可以實現脫離matlab的混合編程,並成功的調用了神經網路工具箱。

② vc matlab 混合編程,哪種方式最好

調用matlab引擎:是要求MATLAB作為VC的一個後台來調用,從本質來說還是在MATLAB中運行的程序;
基於matcom:可以脫離MATLAB的環境,但是貌似有一部分MATLBA中的函數不能完全調用;而且方法簡單;
基於COM的:這個我不太會也沒有試過;
我推薦將MATLAB的程序編譯成動態庫在VC中調用,這也可以完全脫離MATLAB的環境,可以完美調用

③ 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

④ labview與matlab混合編程時,matlab中fsolve函數在labview中怎樣調用

在labview裡面可以直接嵌入matlab程序的。裡面有個function是「matlab script node」。在函數選板裡面的「數學」-「腳本與公式」-「腳本節點」下。
你把m源文件可以放入進去,定義號輸入參數 和輸出(在你的例子里就是q(1)和q(2)了)。
輸入參數和輸出防在前面板上。方便觀察。輸出用「圖形顯示控制項」下的波形表。輸入用個數值輸入就可以了。然後運行。在波形表裡就可以看到q(1)和q(2)的輸出了。你可以在一個波形表上看 一個波形(那麼你需要放2個波形表來觀察2個輸出)。也可有在同一個波形表裡看2個輸出的曲線。這個需要程序裡面加入「創建數組」函數,把2個輸出構成一個2維數組送給波形表顯示。

⑤ 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工程的程序安裝,就可以解決這種錯誤。

⑥ matlab和c混合編程如何運行

簡單點的,你就用matlab寫一個介面程序,封裝你的c程序,類似下面這種:(matlab的例子,實現數組相乘,文件為arrayProct.c)

#include "mex.h"

/* 你的c */
void arrayProct(double x, double *y, double *z, mwSize n)
{
mwSize i;
/* multiply each element y by x */
for (i=0; i<n; i++) {
z[i] = x * y[i];
}
}

/* 介面程序 */
void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
/*初始化輸入輸出*/
double multiplier; /* input scalar */
double *inMatrix; /* 1xN input matrix */
mwSize ncols; /* size of matrix */
double *outMatrix; /* output matrix */

/* 參數檢查,如果程序較簡單也可以不用做*/
if(nrhs!=2) {
mexErrMsgIdAndTxt("MyToolbox:arrayProct:nrhs","Two inputs required.");
}
if(nlhs!=1) {
mexErrMsgIdAndTxt("MyToolbox:arrayProct:nlhs","One output required.");
}
/* make sure the first input argument is scalar */
if( !mxIsDouble(prhs[0]) ||
mxIsComplex(prhs[0]) ||
mxGetNumberOfElements(prhs[0])!=1 ) {
mexErrMsgIdAndTxt("MyToolbox:arrayProct:notScalar","Input multiplier must be a scalar.");
}

/* check that number of rows in second input argument is 1 */
if(mxGetM(prhs[1])!=1) {
mexErrMsgIdAndTxt("MyToolbox:arrayProct:notRowVector","Input must be a row vector.");
}

/* get the value of the scalar input */
multiplier = mxGetScalar(prhs[0]);

/* create a pointer to the real data in the input matrix */
inMatrix = mxGetPr(prhs[1]);

/* get dimensions of the input matrix */
ncols = mxGetN(prhs[1]);

/* create the output matrix */
plhs[0] = mxCreateDoubleMatrix(1,ncols,mxREAL);

/* get a pointer to the real data in the output matrix */
outMatrix = mxGetPr(plhs[0]);

/* call the computational routine */
arrayProct(multiplier,inMatrix,outMatrix,ncols);
}

這個看起來復雜,其實很簡單的,就幾步:
1、使用mxGet*將輸入變為matlab兼容形式
2、使用mxSet*初始化輸出空間
3、使用你的C程序運算

⑦ matlaba與c混合編程中,函數的調用。

convolce.c也要編譯,否則找不到函數的實現模塊。

mexcorrDn.cconvolce.c

⑧ C#與matlab混合編程,調用dll文件時出現out of memory等一些問題,求高手幫忙

matlab可用內存有限,好像默認256M最多512M,超出的話就出錯;不是混合編程的原因,直接在matlab也會出現這種錯誤。
這是網站上給的建議:
參考網站:http://www.mathworks.cn/cn/help/matlab/matlab_prog/resolving-out-of-memory-errors.html
Compress
data
to
rece
memory
fragmentation.
If
possible,
break
large
matrices
into
several
smaller
matrices
so
that
less
memory
is
used
at
any
one
time.
If
possible,
rece
the
size
of
your
data.
Make
sure
that
there
are
no
external
constraints
on
the
memory
accessible
to
MATLAB.
(On
UNIX®
systems,
use
the
limit
command
to
check).
Increase
the
size
of
the
swap
file.
We
recommend
that
you
configure
your
system
with
twice
as
much
swap
space
as
you
have
RAM.
See
Increasing
System
Swap
Space,
below.
Add
more
memory
to
the
system.
關於樓主說
單獨使用matlab運行不會報錯,C#調用時就會out
of
memory。
是不是可以這樣理解,調用matlab的C#
會比淡出用matlab消耗內存更大,把數據量減半試試吧。
我是在直接用matlab做BP網路時,內存溢出,沒有辦法。

閱讀全文

與調用matlab混合編程相關的資料

熱點內容
程序員留學移民 瀏覽:47
梁中間部位箍筋加密區 瀏覽:117
頻譜分析pdf 瀏覽:750
樂2怎麼升級安卓70 瀏覽:172
java中獲取日期 瀏覽:506
單片機74hc245 瀏覽:272
美國歷史上的總統pdf 瀏覽:751
程序員脫單實驗室靠不靠譜 瀏覽:458
php中間四位手機號 瀏覽:869
永旺app怎麼樣了 瀏覽:516
壓縮空氣流量計算軟體 瀏覽:649
智慧聊天app怎麼激活 瀏覽:924
一加換機備份到哪個文件夾 瀏覽:735
支撐pdf 瀏覽:417
java空文件夾刪除 瀏覽:587
安卓9跟81有什麼區別 瀏覽:912
n1藍寶書pdf 瀏覽:244
為什麼安卓機拍照那麼丑 瀏覽:695
伺服器綁定雲產品實例 瀏覽:314
程序員認真工作被開除 瀏覽:455