Main Content

Java에서 MATLAB 함수 실행하기

MATLAB 함수 호출하기

MatlabEngine fevalfevalAsync 메서드를 사용하여 Java®에서 MATLAB® 함수를 실행할 수 있습니다. 이러한 메서드는 MATLAB feval 함수처럼 동작합니다. 함수 실행 결과를 Java에 반환하거나 Java에서 인수를 전달하려는 경우 fevalfevalAsync를 사용하십시오.

MATLAB 함수를 호출하려면 다음을 수행하십시오.

  • 함수 이름을 문자열로 전달합니다.

  • MATLAB 함수에 필요한 입력 인수를 정의합니다.

  • MATLAB 함수의 예상 출력값 개수를 지정합니다(지정하지 않으면 1로 가정됨).

  • MATLAB 함수의 출력값에 대한 적절한 반환 유형을 정의합니다.

  • 작성기를 사용하여 MATLAB 명령 창에서 Java로 출력값을 리디렉션합니다.

MatlabEngine evalevalAsync 메서드를 사용하여 MATLAB 표현식을 실행할 수도 있습니다. 이러한 메서드를 사용하여 MATLAB 작업 공간에 변수를 만들 수 있지만, 값을 반환하지는 마십시오.

반환되는 인수가 하나인 함수 실행하기

이 예제 코드는 MATLAB sqrt 함수를 사용하여 double형 배열에 있는 요소의 제곱근을 구합니다. feval 메서드는 sqrt 함수 호출 결과값을 포함하는 double형 배열을 반환합니다.

import com.mathworks.engine.*;

public class javaFevalFunc{
    public static void main(String[] args) throws Exception{
        MatlabEngine eng = MatlabEngine.startMatlab();
        double[] a = {2.0 ,4.0, 6.0};
        double[] roots = eng.feval("sqrt", a);
        for (double e: roots) {
            System.out.println(e);
        }
        eng.close();
    }
}

반환되는 인수가 여러 개인 함수 실행하기

이 예제 코드는 MATLAB gcd 함수를 사용하여 입력 인수로 전달되는 두 정수 값의 최대공약수와 베주 계수(Bézout coefficient)를 구합니다. feval 메서드는 gcd 함수 호출 결과값을 포함하는 객체 배열을 반환합니다. 반환되는 값은 정수입니다.

MATLAB gcd 함수는 세 개의 출력 인수를 반환하므로, 반환되는 값의 개수를 feval 메서드에 대한 첫 번째 인수로 지정하십시오.

import com.mathworks.engine.*;

public class javaFevalFcnMulti {
    public static void main(String[] args) throws Exception {
        MatlabEngine eng = MatlabEngine.startMatlab();
        Object[] results = eng.feval(3, "gcd", 40, 60);
        Integer G = (Integer)results[0];
        Integer U = (Integer)results[1];
        Integer V = (Integer)results[2];
        eng.close();
    }
}

출력 인수의 개수를 지정하는 경우

MatlabEngine fevalfevalAsync 메서드를 사용하면 MATLAB 함수에 의해 반환되는 출력 인수의 개수를 지정할 수 있습니다. 기본적으로 MATLAB 함수의 출력 인수 개수는 1인 것으로 가정됩니다.

출력 인수가 없거나 둘 이상의 출력 인수를 갖는 MATLAB 함수를 호출하려면, 출력 인수 개수를 feval 또는 fevalAsync로 전달되는 첫 번째 인수로 지정하십시오.

예를 들어, 다음 코드는 MATLAB gcd 함수를 출력 인수가 3개인 구문으로 호출합니다.

Object[] results = eng.feval(3, "gcd", 40, 60);

MATLAB 함수는 요청된 출력 인수의 개수에 따라 다르게 동작할 수 있습니다. 일부 함수는 출력 인수를 반환하지 않거나 지정된 개수의 출력 인수를 반환할 수 있습니다. 예를 들어, MATLAB pause 함수는 지정된 시간(초) 동안 실행을 보류합니다. 그러나 출력 인수와 함께 pause를 호출하는 경우, 이 함수는 즉시 상태 값과 함께 반환됩니다. 따라서, 다음 코드에서는 feval이 한 개의 출력 인수를 요청하므로 MATLAB이 일시 중지되지 않습니다.

eng.feval("pause", 10);

요청된 10초 동안 MATLAB 실행을 일시 중지하려면 출력 인수 개수를 0으로 지정하십시오.

eng.feval(0, "pause", 10);

참고

MATLAB 함수가 출력 인수 없이 호출되도록 하려면 반환되는 인수 개수를 0으로 지정하십시오.

관련 항목