이전 포스트에서 MATLAB의 스크립트 파일(m파일)에 대해서 설명했는데 파일로 기록하여 수행하는 것의 장점은 다음과 같다.

       ① 동일한 작업을 손쉽게 반복하여 수행할 수 있다.

       ② 변수값 등을 변경하여 재수행하기 편하다.


스크립트 m파일을 수행할 때 명령창에서 ‘ex1'이라고 명령을 내렸었다. 즉 파일이름이 곧 명령어가 되는 것이다. 만약 현재 작업공간에 'ex1'이라는 변수가 존재한다면 명령창에는 이 변수값을 보여줄 것인가 혹은 ex1.m화일을 수행할 것인가 우선 순위의 문제가 생긴다. 명령창에 어떤 명령어가 입력되었을 경우 다음과 같은 순서에 따라 검색한다.

  1. 현재 작업공간에 그 변수가 존재 하는가 검색한다. 변수가 존재할 경우 변수값을 보여준다.

  2. 만약 변수가 존재하지 않을 경우 내부적으로 정의된 함수들(MATLAB의경우 C: \MATLAB50 \Toolbox \Internal 폴더에 존재하는 함수들)을 검색하여 동일한 함수가 있으면 그 함수를 수행한다.

  3. 현재 폴더 내의 m파일을 검색해서 동일한 이름을 갖는 m파일이 있을 경우 그것을 실행한다.

  4. 만약 현재 폴더에 그 이름을 갖는 m파일이 존재하지 않을 경우 path에 등록된 폴더들을 검색하여 그 안에 동일한 이름을 갖는 M파일이 있는지 검색하여 존재하면 그것을 실행한다.

  5. 위의 모든 경우에 해당하지 않으면 에러 메세지를 발생한다.

따라서 직접 작성하는 m파일을 저장할 때 내부함수 ( sin, cos, exp, log 등등)와 이름이 겹쳐지지 않도록 주의해야 하며 lookfor명령어(또는 help명령어)를 사용하여 지금 사용하려는 파일명이 내부함수에 있는지 확인하는 과정도 필요하다.


 스크립트 m파일을 작성할 때 유용한 입출력  명령어들을 소개하면 다음 표와 같다.


[표 1] MATLAB의 입출력 함수들

함수명

기능

sprintf()

C언어의 printf()함수와 동일한 기능을 가진 함수

disp('문자열‘)

문자열을 화면에 표시

y=input('문자열‘)

키보드로부터 입력받은 값을 y에 저장

pause

아무 키나 눌려질 때까지 대기


위의 표에서 소개한 함수중 sprintf()함수는 C언어의 printf()함수와 동일한 기능을 가진 함수이다. 이함수들을 사용하여 다음과 같은 예제를 만들어 보았다. 입력한 후 'ex2.m'화일명으로 저장하자.


n=input('Type one positive integer :');
np=prod(1:n);
disp(sprintf('%d! = %d. Press any key.', n ,np))
pause
disp('All done.')


이 예제는 입력받은 양의 정수의 팩토리얼(factorial)을 구하는 m파일이다. prod()함수는 입력벡터의 모든 요소들을 곱하여 그 값을 반환하는 함수이다. 이제 편집창에서 [f5]를 누르던가 아니면 다음과 같이 명령창에서 실행시켜 결과를 확인해 보자.


>>ex2


[그림 1] gnu octave에서 실행시킨 화면


이와 같이 input(), disp(), sprintf() 함수를 이용하면 사용자로부터 입력을 받고 화면에 결과값을 출력하는 프로그램을 작성할 수 있다.

Posted by 살레시오
,