這段**是c++呼叫matab引擎的過程,**的目的很簡單,在c++中建立乙個vector陣列,然後將這個vector陣列單位化。寫這個**的目的是學些c++與matlab之間的資料互動,以供日後參考。
#include
#include
#include
#include
#include
#include
"engine.h"
#include
using
namespace
eigen
; using
namespace
std;
vector
veca;
void
createa(int
m );
intmain
()
engine * m_engine;//matlab引擎
m_engine = null
;//初始化matlab引擎
if((!m_engine && !(m_engine = engopen(null
))))// 開啟amatlab引擎,失敗則退出
engsetvisible(m_engine,1);//設定matlab視窗在呼叫時的可見性,為a1時可見?
//把需要計算的資料傳入matlab
mxarray *veca= mxcreatedoublematrix(10, 1, mxreal);//建立10行1列的實數,組陣列型別是matlab特有的
memcpy
((void *) mxgetpr(veca), (void *) pa, 10 * sizeof(double));//將c++中d的資料傳入matlab
engputvariable(m_engine, "vec", veca);//賦值語句,vec是matlab**中的輸入引數y,veca是c++傳入的引數
//buffer用來接收除錯資訊,當matlab**有錯時,可以輸出buffer檢視錯誤資訊
char
buffer[255];
buffer[254] = '\0';
engoutputbuffer(m_engine, buffer, 255);
engevalstring(m_engine, "cd('d:\\code\\testeigen\\testeigen\\mat_code')");//開啟matlab**所在資料夾,注意路徑中是雙反斜槓
engevalstring(m_engine,"normalv = normalizevec(vec);");//這是matlab中的呼叫語句,注意,matlab的.m檔名要與呼叫的函式名一致,否則會找不到要呼叫的函式
printf
("%s", buffer);//當matlab**出錯時,用來輸出除錯資訊
//接下來把matlab的計算結果傳回給c++
mxarray * mvec = null
;//同樣宣告乙個matlab中的陣陣型別
mvec = enggetvariable(m_engine, "normalv");
double * cvec= null
;//宣告乙個c++中的指標
cvec= (double*)mxgetdata(mvec);//將matlab中的資料賦給c++中的資料
for( int
i = 0; i
mxdestroyarray(veca);//銷毀matlab陣列
mxdestroyarray(mvec);
return 0;
system
("pause" );
} void
createa(int
m )
cout
<
<
<
; }
輸出結果:
%功能是實現乙個向量的單位化
function normalv = normalizevec(vec)
normalv = vec/sqrt(sum(vec.^2, 2));
end
出現錯誤時,看到提示資訊如下,
然後知道是normaozeve函式沒定義,發現是呼叫語句寫錯了.
使用c 呼叫matlab
使用的環境是vs2008 matlab2011,其它的版本應該差不多。使用matlab寫好乙個函式後,在c 中呼叫它,可以極大的提高開發速度。由於別的文章沒有介紹如何輸入輸出,我在這裡再寫一遍。1.配置 文章中,已經詳細介紹了如何配置matlab,不再贅述。2.編譯 上面的文章使用命令編譯,編譯出的...
matlab呼叫C語言
一 首先要熟悉matlab所附帶的c語言api 1 定義mexfunction函式,mexfunction的定義法唯一 它只能是如下形式 void mexfunction int nlhs,mxarray plhs,int nrhs,const mxarray prhs 其名稱和引數型別不許有任何改...
matlab呼叫c 函式
經常會遇到乙個問題,就是怎麼用matlab來呼叫已經寫好的c 下面就學習一下。首先要明白呼叫c 需要用到mex,他主要和matlab的主要介面,介面的主要入口為如下函式 void mexfunction int nlhs,mxarray plhs,int nrhs,const mxarray prh...