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

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

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

아래의 코드는 두 개의 변수의 값(int 형)을 입력 받아서 합 연산을 한 후 그 결과(int 형)를 돌려주는 C 코드를 Matlab에서 사용이 가능하도록 만든 코드이다.

기존 적으로 "mex.h" 헤더 파일이 포함되어야 하고, 함수는 subroutine과 gateway routine으로 구분 된다. subroutine은 C에서 처리하고자 하는 것이 들어가는 영역이고 gateway routine은 C와 Matlab을 연결시켜주는 routine이다.

 

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

#include "mex.h"

void test(int x, int y, int *z)


{

     *z=x+y;
}

/* The gateway routine. */

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])

{
    int x, y, *z;
   
    x = (int)mxGetScalar(prhs[0]);

    y = (int)mxGetScalar(prhs[1]);
   
    /* Create matrix for the return argument.*/
    plhs[0] = mxCreateNumericMatrix(1, 1,

mxINT16_CLASS

, mxREAL);
   
    z = (int)mxGetPr(plhs[0]);
   
    /* Call the function subroutine.*/
   

test(x, y, z);

}

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

 

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

>>z=test(1,2)

를 치면

z = 3 결과가 나타난다.

 

matlab만으로 처리하는 경우 속도가 저하(예를 들어 for 루프문이 많은 경우)되거나, 하드웨어를 제어하려고 할 때 활용하면 좋을 듯 하다.

 

Matlab은 기본적으로 double 형으로 처리된다. 하지만 C/C++에서는 변수형에 char, string, int, float, double 형 등 다양한 형태가 존재하기 때문에 이를 처리하는 부분을 중점적으로 살펴보면 쉽게 응용할 수 있을 것으로 판단된다.

728x90
반응형

댓글