'M파일'에 해당되는 글 2건

  1. 2015.07.05 MATLAB의 스크립트 파일(part 2)
  2. 2015.07.05 MATLAB의 스크립트 파일(part 1)


 이전 포스트에서 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 살레시오

 간단한 작업을 수행하고자 할 때에는 이전에 소개한 명령어들을 MATLAB의 명령창에서 명령을 직접 입력하여 그 결과를 확인할 수 있다. 하지만 명령어들의 수가 많아지는 경우 혹은 전에 내렸던 명령들 중에서 변수 한두 개의 값만 바꿔서 다시 수행할 필요가 있다던가 하는 경우에는 다시 일일이 명령창에서 명령들을 입력한다는 것은 매우 번거로울 것이다. 이러한 경우에는 이들 명령어들의 묶음을 파일로 저장한 후 이 파일에서 명령어들을 읽어서 그대로 수행하도록 하는 기능이 유용하다. MATLAB에서는 이러한 기능을 지원하며 이 경우 자체적으로 지원하는 텍스트 에디터 창을 이용한다. M화일이라는 것은 이렇게 작성된 파일의 확장자가 ".m"이기 때문에 붙여진 이름이다.

스크립트(script) M파일

 글로 읽는 것 보다 직접 수행하여 보면 무슨 말인지 쉽게 이해가 갈 것이다. MATLAB에서는 메뉴의 ‘파일-새 파일’을 누르거나, 툴바의 단추를 누르거나, 단축키 Ctrl+N을 누르면 명령어창 옆에 새 파일 편집창이 나타난다. 이 편집창에 다음과 같은 예제를 입력해 보라.


erasers=4;
pads=6;
tape=2;
items = erasers+pads+tape
cost = erasers*25 + pads*52 + tape*99
average_cost = cost/items


[그림 1] gnu octave 에서실행한 모습


그리고 적당한 폴더를 만든 후 이 파일명을 “ex1.m"으로 하여 저장한다. 그 후 이 파일을 실행하려면 다음과 같이 두 가지 방법이 있다.

① 편집창 메뉴에서 Debug>Run(단축키 [F5])을 선택하면 명령창에 현재 편집창에 있는 명령어들이 순차적으로 수행된다. (gnu octave에서도 동일한 방법으로 수행하 수 있다.)

② 명령창에서 파일을 저장한 폴더로 경로를 바꾼다음 (cd 명령어 이용) 명령줄에 다음과 같이 입력한다.


>>ex1


그러면 다음과 같은 결과를 보게 될 것이다.

[그림 2] gnu octave에서 예제를 실행한 모습


위의 세 줄은 명령의 끝에 세미콜론(;)이 있어서 실행 결과가 안 나타나는 것이고 뒤의 세 줄에는 세미콜론이 없으므로 그 실행결과가 명령창에 나타난 것이다. 따라서 세미콜론을 이용하여 중간 과정이나 중요치 않은 결과는 화면에 보여주니 않고 중요한 연산결과만을 화면에 나타나도록 할 수 있다. 작업공간에 여섯 개의 변수가 생성됨을 변수창에서 확인할 수도 있다. 위의 결과에서 알 수 있듯이 M파일에 기록된 명령어들이 ‘순차적으로’ 수행된다. 즉 명령창에서 다음과 같이 하나씩 명령을 내려주는 것과 완전히 동일한 작용을 한다.


>>erasers=4;
>>pads=6;
>>tape=2;
>>items = erasers+pads+tape
>>cost = erasers*25 + pads*52 + tape*99
>>average_cost = cost/items


따라서 이러한 M파일을 스크립트(script) M화일이라고 한다. 스크립트란 ‘대본’이라는 뜻이므로 배우가 대본에 쓰인 순서대로 대사를 읊어나가고 적힌 대로 연기를 하듯이 스크립트 M파일에 기록된 것을 MATLAB이 읽어서 순서대로 명령을 수행을 한다.



Posted by 살레시오