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

matlab與c混合編程

發布時間: 2023-01-07 17:01: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的混合編程,並成功的調用了神經網路工具箱。

『貳』 關於matlab與vc混合編程

nargout是輸出參數,改:

isOK=mlfSignal(0,&y); 為:

isOK=mlfSignal(1,&y);

試試吧。。

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

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

『肆』 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程序運算

『伍』 用MATLAB如何與C++連接

Matlab 是當前應用最為廣泛的數學軟體,具有強大的數值計算、數據分析處理、系統 分析、圖形顯示甚至符號運算等功能[1]。利用這一完整的數學平台,用戶可以快速實現十分 復雜的功能,極大地提高工程分析計算的效率[2][3]。但與其他高級程序[3]相比,Matlab 程序 是一種解釋執行程序,不用編譯等預處理,程序運行速度較慢[4]。
C/C++語言是目前最為流行的高級程序設計語言之一[5]。它可對操作系統和應用程序以 及硬體進行直接操作,用C/C++語言明顯優於其它解釋型高級語言,一些大型應用軟體如 Matlab 就是用C 語言開發的。
在工程實踐中,用戶經常遇到Matlab 與C/C++混合編程的問題。本文基於Matlab 6.5和VC6.0 開發環境,在Windows 平台下就它們之間的混合編程問題進行深入研究並舉例說明。
2 Matlab 調用C/C++
Matlab 調用C/C++的方式主要有兩種:利用MEX 技術和調用C/C++動態連接庫。
在Matlab 與C/C++混合編程之前,必須先對Matlab 的編譯應用程序mex 和編譯器mbuild進行正確的設置[1]:
對Matlab 編譯應用程序mex 的設置:Mex –setup.
對Matlab 編譯器mbuild 的設置:Mbuild –setup.
2.1 調用C/C++的MEX 文件
MEX 是Matlab Executable 的縮寫,它是一種「可在Matlab 中調用的C(或Fortran)語 言衍生程序」[6]。MEX 文件的使用極為方便,其調用方式與Matlab 的內建函數完全相同,只 需在Matlab 命令提示符下鍵入MEX 文件名即可。
一個C/C++的MEX源程序通常包括4個組成部分,其中前3個是必須包含的內容,第4個則根據所實現的功能靈活選用:(1)#include 「mex.h」;(2)MEX文件的入口函數mexFunction, MEX文件導出名必須為mexFunction函數;(3)mxArray;(4)API函數

『陸』 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

『柒』 簡述Matlab與C++混合編程的主要優點

取長補短,
C++在界面和進程式控制制等方面比matlab強。
Matlab在矩陣(數組)運算方面比較強,而且強大的函數庫涵蓋了各個領域,不用C++編寫相關函數。

兩者混合編程,肯定能集成兩者的優點了。

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

通過matcom混合編程。

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

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

『玖』 C#與matlab混合編程,實例化錯誤

DllComponent.DllCacu my = new DllComponent.DllCacu();//這里有問題

實例化錯誤
應該是沒有添加引用吧,或系統沒有注冊這個組件,打開 Visual Studio 2008 命令提示,用這個命令先注冊一下Regasm c:\test.dll(你的dll)

Regasm.exe讀取程序集中的元數據,並將所需的項添加到注冊表中。注冊表允許 COM 客戶程序以透明方式創建 .NET Framework 類。類一經注冊,任何 COM 客戶程序都可以使用它,就好像該類是一個 COM 類。類僅在安裝程序集時注冊一次。程序集中的類實例直到被實際注冊時,才能從 COM 中創建。

manifests的問題,修改原來的 manifests內容為:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.VC90.CRT"
version="9.0.21022.8"
processorArchitecture="X86"
publicKeyToken="1fc8b3b9a1e18e3b"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>

參考這篇文章
http://blog.csdn.net/j88k99l00/archive/2009/08/09/4428203.aspx

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:593
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:888
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:581
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:765
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:684
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1012
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:255
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:113
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:806
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:712