내가 MATLAB을 썩 좋아하지 않는 이유는

 

(학부 시절 여러 교수님들의 MATLAB 극찬론을 들어왔음에도 불구하고)

 

딱 한 가지는 아니지만, 아무래도 자동화가 힘든 게 주된 원인인 것 같다.

 

 

 

일반적으로 우리가 스크립팅을 해서 실험이나 작업 등을 자동화할 때는

 

쉘 스크립트에 연속된 명령어들을 잔뜩 적어 넣고 이를 실행시킨 다음,

 

내가 자리를 비운 시간 동안 컴퓨터가 멋지게 임무를 완수하기를 기대한다.

 

하지만 MATLAB의 경우 GUI에 상당한 중점을 두고 있다 보니, 아무래도 쉘 환경과는 잘 맞지 않는다.

 

 

다음 명령어는 터미널에서 example.m 파일을 실행 (MATLAB GUI에서 F5를 누르는 것과 동일) 한다.

$ matlab -nodisplay < example.m

-nosplash 옵션을 추가하면 시작 화면을 띄우지 않는다 (참조).

 

물론 -nodisplay 옵션 덕에 화면 자체가 나오지 않기 때문에 시작 화면 또한 볼 일이 없지만

 

체감상 로딩이 조금 빨라지는 것 같다.

 

 

아래와 같은 명령어도 작동한다.

$ matlab -batch -nodisplay -nosplash "example"

형태를 보아하니 MATLAB 커맨드 라인에서 example을 입력하는 것과 동일한 효과가 있는 것 같다.

 

 

위의 형태들은 내가 실행하고 싶은 코드가 항상 고정된 루틴으로 작동할 때 유용하다.

 

하지만 사실 문제는 커맨드 라인 인수를 받아서 동적으로 프로그램을 실행하는 것이다.

 

 

example.m 파일이 아래와 같이 되어있다고 생각해보자.

function x = example(a, b, c)
    disp(a);
    disp(b);
    disp(c);
end

정확한 원리는 모르겠지만, 아래 스크립트를 실행하면 example 함수의 결과를 터미널에서 확인 가능하다.

$ matlab -batch "example(1, 2, 3)"
    1
    2
    3

-batch 대신 -r을 사용하는 것도 가능하다.

 

하지만 이 경우, example 완료된 이후 MATLAB이 종료되지 않고

 

인터프리터 >> 가 그대로 남아 사용자의 입력을 기다린다.

 

자동화에 치명적이므로 -batch를 사용하는 것이 적절해 보인다.

 

이상하게도, -batch와 -r 모두 -nodisplay나 -nosplash 옵션과 함께 사용하면 오류가 발생한다.

 

문자나 문자열을 인수로 넣어주는 경우에는 작은따옴표로 인수들을 감싸주자.

$ matlab -batch "example('1', 2, 3)"
1
    2
    3

MATLAB에서 문자와 숫자를 출력하는 법이 달라, 문자는 왼쪽에 딱 붙어서 출력되는 것을 확인할 수 있다.

 

 

함수형으로 되어있지 않은 코드는 실행하면서 특정 변수에 동적인 값을 할당하는 것이 굉장히 까다롭다.

 

가능하다면 MATLAB 사용을 최소한으로 하는 게 쓰기도 좋고 보기도 좋은 스크립트를 만드는 데에 도움이 되지 않을까.

+ Recent posts