當前位置:首頁 » 編程軟體 » matlab與c的混合編程

matlab與c的混合編程

發布時間: 2025-01-22 11:23:12

① 哪位大俠知道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給軟體開發人員提供了一種共享二進制代碼的方法,這種共享並不局限於某種編程語言。

② 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程序運算

③ c語言與matlab混合編程怎麼生成m文件

通過matcom混合編程。

首先把matlab語言轉換成dll,可以在c裡面調用。

當然,新版本的matlab可以把m語言直接轉換成標准c

④ vc++ matlab混合編程 fsolve

這個可以有四種方法實現:
(1)將Matlab程序編譯成 C/C++源文件並嵌入VC++;
(2)在C/C++程序中利用 Matlab engine調用 Matlab函數;
(3)在C/C++程序中直接使用 Matlab C/C++ Math Library;
(4)將.m文件編鬧鬥鬥譯成 *.dll文件嵌入到 VC++的程序中。
自己上銷喚網查一下。

不過告訴你一個簡單的,在matlab的工作窗口執行:
mbuild -setup

按提示操作
然後執行
met -setup
完成後,到VC裡面,應該會出現met工液磨程選項,然後操作就很簡單了。

⑤ matlab與c混合編程,engOpen()的問題,matlab引擎啟動不了

使用engOpen()打開Matlab引擎總是失敗,問題可能就是Matlab組件沒有注冊。注冊方法:點擊開始/運行/cmd,在命令行提示窗口下更改到Matlab安裝路徑/bin,運行指令
matlab/regserver,注冊成功後會彈出Matlab 命令窗口。

⑥ matlab與c 混合編程 大概可提速多少倍

我做圖像處理的時候,先是用MATLAB,因為有大量的循環處理,其運行時間將近一分鍾,後來改用MATLAB與C混合,時間縮短至0.09秒,時間之差,真的是不可估量。

但是,情況不完全如此,MATLAB優點在於矩陣運算中,如果你的程序中有大量的矩陣運算,那麼混合編程個人不是很建議;C語言優點在於循環速度很快。

我也有這樣的經歷,我的演算法中有大量的矩陣運算(由於我是做圖像處理,矩陣基本上是512*512的),本來用MATLAB編程用了9秒左右的時間,但是改用了C混合後,N長時間,反正我是等了將近一分鍾,混合程序我是檢驗過的,沒有死循環的。

以上這些完全個人經驗之談,希望對您有個幫助。

熱點內容
python獲取list元素 發布:2025-03-07 01:47:34 瀏覽:139
網易雲雲課堂的緩存 發布:2025-03-07 01:46:39 瀏覽:426
我的世界大廳伺服器怎麼進 發布:2025-03-07 01:33:09 瀏覽:111
php讀文件 發布:2025-03-07 00:36:48 瀏覽:740
無線網如何分享密碼 發布:2025-03-07 00:27:33 瀏覽:428
dvr遠程訪問 發布:2025-03-07 00:24:37 瀏覽:779
java可視化界面編程 發布:2025-03-07 00:17:22 瀏覽:468
資料庫溫備 發布:2025-03-07 00:17:12 瀏覽:501
debian如何編譯qemu 發布:2025-03-07 00:05:32 瀏覽:859
ins海外伺服器ip是什麼 發布:2025-03-06 23:44:59 瀏覽:357