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

 지금까지는 명령창에 명령어들을 직접 한두 개씩 입력해서 결과를 확인하는 식으로 사용하였는데 많은 경우에 명령어들을 묶어서 파일로 저장하여 한꺼번에 실행시키는 방법을 사용한다. 명령창에 명령을 직접 입력하면 Scilab 종료시 그것들이 사라지지만 파일에 저장하여 놓으면 이후에 언제라도 불러서 사용할 수 있다.

 이러한 명령어들의 집합(프로그램)을 편집하고 저장하는데 사용하는 도구가 SciNote 이다. 메뉴에서 Applications > SciNotes 항목을 실행시키면 SciNote가 실행된다. 이제 다음과 같이 간단한 프로그램을 작성한 후 적당한 폴더에 저장시키자. 필자는 test02.sce 라는 화일명으로 저장시켰다.(캡션바에 전체 경로가 표시된다.)

[그림 1] SciNote


프로그램은 3x3 난수 행렬 두 개를 생성시킨 후 그 결과를 disp()함수로 화면에 표시하도록 하는 간단한 것이다. 첫 두 줄의 끝은 세미콜론(;)을 넣어놓았다.


 이제 이것을 실행시키기 위해서 Execute 메뉴를 보면 다음 그림과 같이 여러가지 옵션이 있다.


[그림 2] sce파일 실행 옵션

그 중  ..file with echo (ctrl-L) 을 선택하거나 단축키를 누르면 다음과 같이 명령창에 표시된다. 이것은 명령창에 한 줄씩 수동으로 입력하는 것과 완전히 동일하게 작동하며 각 프로그램의 줄이 화면에 표시된다. 또한 세미콜론(;)으로 끝나면 그 결과를 표시하지 않고 그렇지 않으면 표시한다.

[그림 3] [ctrl]+[L] 단축키로 스크립트 파일을 실행한 결과

이에 반해서 Save and execute (단축키 F5) 를 실행하면 먼저 저장하고 실행한다. 이것은 명령이 화면에 표시되지도 않으며 세미콜론(;)의 유무와 상관없이 그 결과도 화면에 표시되지 않는다. 다만 이 예제의 경우 disp()함수가 사용되었으므로 이 함수의 실행결과만이 화면에 표시된다.

[그림 4] [F5] 단축키로 실행한 결과


이때 사용되는 명령어가 exec()함수이다. 이 함수는 sce파일(그리고 나중에 나올 sci파일)을 실행시키는 기능을 수행하며 다양한 실행 옵션을 줄 수 있다. SciNote에서는 -1옵션이 지정되었음을 알 수 있다. 이것에 대해서는 다른 포스트에서 더 자세히 설명하도록하고 일단 여기에서는 SciNote에서 실행시키는데 [Ctrl]+[L] 단축키나 [F5] 단축키가 사용된다는 것을 알아두도록 하자.

특수한 기능들

 명령창과 SciNote가 분리되어 있다면 프로그램 작업 시에 몇 가지 번거로운 점들이 있다. 매번 창들 사이를 클릭해서 왔다 갔다 해야된다던가, 아니면 실행 결과나 프로그램이 다른 창에 가려서 보이지 않는다던가 하는 점들이다. 이러한 불편함을 해소하기 위해서 SciNote와 콘솔창을 하나로 결합할 수 있는 기능이 있다.

[그림 5] SciNote의 위치 조절

위 그림에 표시된 막대 부분을 마우스로 드래그 하여 콘솔창에 놓으면 해당 위치에 결합이 된다. 그래프 창도 마찬가지로 도킹시킬 수 있으며 반대로 SciNote 창에 콘솔창을 도킹시킬 수도 있으므로 자유롭게 작업 환경을 설정할 수 있다.



Posted by 살레시오