#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]);
}
engClose(ep); // 關閉 Matlab engine
留言列表