Java에서 MATLAB 함수 실행하기
MATLAB 함수 호출하기
MatlabEngine
feval
및 fevalAsync
메서드를 사용하여 Java®에서 MATLAB® 함수를 실행할 수 있습니다. 이러한 메서드는 MATLAB feval
함수처럼 동작합니다. 함수 실행 결과를 Java에 반환하거나 Java에서 인수를 전달하려는 경우 feval
과 fevalAsync
를 사용하십시오.
MATLAB 함수를 호출하려면 다음을 수행하십시오.
함수 이름을 문자열로 전달합니다.
MATLAB 함수에 필요한 입력 인수를 정의합니다.
MATLAB 함수의 예상 출력값 개수를 지정합니다(지정하지 않으면 1로 가정됨).
MATLAB 함수의 출력값에 대한 적절한 반환 유형을 정의합니다.
작성기를 사용하여 MATLAB 명령 창에서 Java로 출력값을 리디렉션합니다.
MatlabEngine
eval
및 evalAsync
메서드를 사용하여 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
feval
및 fevalAsync
메서드를 사용하면 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
으로 지정하십시오.