#include <engine.h>

//型態要用double; 元素要column major順序給定
double cT[5] = {1,2,3,4,5};

Engine *ep;     // 宣告Matlab engine
mxArray *T , *result = NULL;      // 宣告Matlab變數;for output / input

// 確定Matlab engine開啟成功
if (!(ep = engOpen("\0"))) {
      fprintf(stderr, "\nCan't start MATLAB engine\n");
      return EXIT_FAILURE;
}

/*  建立Matlab陣列,有real(mxREAL) / complex(mxCOMPLEX) 兩種型態
 mxCreateDoubleMatrix(mwSize m, mwSize n, mxComplexity ComplexFlag)  // m * n 的陣列   */
mT = mxCreateDoubleMatrix(1, 5, mxREAL);
memcpy((void *)mxGetPr(mT), (void *)cT, sizeof(cT));    // cT是 C 變數

engPutVariable(ep, "T", mT);    // 將值給Matlab
engEvalString(ep, "D = .5.*(-9.8).*T.^2;");   //  engEvalString (ep, "在 Matlab 中的指令");
result = engGetVariable(ep, "x");   // 從Matlab取值;return mxArray 指標
str = mxGetPr(result);   // return C 的double 指標

 //印出解
int size;
size = mxGetM(result) * mxGetN(result);   // mxGetM( )取得mxArray*所指的陣列row數
for(int i=0;i<size;i++){
      printf("%lf,",str[i]);
}

mxDestroyArray(T);    // 清空記憶體
engClose(ep);    // 關閉 Matlab engine
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Y CP 的頭像
    Y CP

    Y CP的部落格

    Y CP 發表在 痞客邦 留言(0) 人氣()