C 呼叫matlab例項

2022-08-05 05:57:08 字數 2271 閱讀 7333

這段**是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...