본문 바로가기
Programming/Matlab, Octave, Scilab

[Matlab] C/C++의 함수 및 기능을 Matlab으로.. [2]

by 도파공 2010. 5. 1.
728x90
반응형

[1]에서 설명한 내용에 여러가지 결과를 출력하는 경우를 가정하여 예제를 꾸며 봤다.

/* ========================================================================= */

#include "mex.h"


void test1(int x, int y, int *z1, int *z2, int *z3)
{
     *z1=x+y;
     *z2=x-y;
     *z3=x*y;
}

/* The gateway routine. */
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    int x, y, *z1, *z2, *z3;
  
    x = (int)mxGetScalar(prhs[0]);
    y = (int)mxGetScalar(prhs[1]);
   
    /* Create matrix for the return argument.*/
    plhs[0] = mxCreateNumericMatrix(1, 1, mxINT16_CLASS, mxREAL);
    plhs[1] = mxCreateNumericMatrix(1, 1, mxINT16_CLASS, mxREAL);
    plhs[2] = mxCreateNumericMatrix(1, 1, mxINT16_CLASS, mxREAL);
   
    z1 = (int)mxGetPr(plhs[0]);
    z2 = (int)mxGetPr(plhs[1]);
    z3 = (int)mxGetPr(plhs[2]);
   
    /* Call the function subroutine.*/
    test1(x, y, z1, z2 , z3);
}
/* ========================================================================= */

 

위의 코드를 matlab에서 >>mex test1.c로 컴파일한 후

>> [z1 z2 z3]=test(1,2)를 치면 아래의 결과가 나온다.

z1 = 3

z2 =  -1

z3 =  2

 

728x90
반응형

댓글