Egloos | Log-in  


<< 이전          다음 >>

Matlab 강좌 2

2007년도에 관련 포스트를 써 놓은 뒤로 계속해서 이것저것 바쁜 삶에 치여 계속해서 포스팅을 할 생각을 하지 못하고, 그러다보니 결국 머릿 속에서 잊혀졌었다.

뭐 이것저것 주절주절거릴 말이 많기는 하지만... 각설하고...

근 4년반? 만에 Matlab과 관련된 포스팅을 재개하려고 한다.

사실 처음에 작성했을 때 내가 생각했던 내용들과, 지금 와서 내 머릿속에 정리되어 있는 Matlab의 구조가 조금은 달라져서 예전에 만들었던 강좌 순서는 폐기를 하고 조금은 자유롭게 이야기를 풀어나갈까 한다. 그래도 뼈대는 어느 정도 비슷할 듯 하다.

-----------------------------------------------------------------------------

2. 연산자와 흐름제어문

(1) 연산자

 Matlab을 비롯해서 논리적인 프로그램을 짤 수 있는 일종의 언어들은 대부분 비슷한 연산자를 가지고 있다. 그러므로 다른 프로그래밍 언어를 해본 경험이 있는 분은 각 연산자가 어떻게 생겼는지만 살펴보면 충분할 것이다.

 1) 관계 연산자
 
 해당 연산자 전후에 변수들을 놓아서 두 변수 사이의 관계에 따라 연산자가 성립하면 1을 반환하고, 성립하지 않으면 0을 반환하게 하는 연산자이다. 'a (연산자) b' 와 같은 문장이 있다면 'a는 b보다 (연산자)이다'라고 읽을 수 있다. 아래는 관계 연산자의 종류와 그 의미이다.

 <     작다
 <=   작거나 같다
 >    크다
 >=   크거나 같다
 ==   같다
 ~=   다르다

 즉, a < b 라는 문장이 있을 때 실제로 a가 b보다 작으면 저 문장은 1의 값을, a가 b보다 크거나 같으면 0의 값을 반환하게 된다.


 2) 논리 연산자

 컴퓨터는 신호를 1과 0으로 구분하여 처리한다. 그리고 대체로 1은 true(참)를, 0은 false(거짓)를 의미한다. 이 신호를 단 하나만 이용하는 것이 아니라 여러개의 신호를 결합하여 다시 새로운 신호를 반환시킬 필요가 있다. 이 때 사용하는 것이 바로 논리 연산자이다.

 &    그리고
 |     또는 (shift + \)
 ~    부정
 Any 어떠한
 All   모든

 예를 들어서 (1 < 2) & (3 < 2) 라는 문장이 있다고 하면 (1 < 2)는 1의 값을 가지고 (3 < 2)는 0의 값을 가지게 될 것이다. 즉 저 식은 1 & 0이 되고, 이것을 다시 연산(?)하게 되면 0이 된다. 즉, &는 이 연산자의 좌우에 있는 값이 모두 1일 때 (True일 때) 1을 반환하고 하나라도 0이 있으면 0을 반환하는 것이다. | 는 &와 비슷하게 생각할 수 있는데, 단, 값이 하나라도 1을 가지고 있으면 연산자가 1을 반환해주고, 모두 0일 때만 0을 반환하게 된다. 그리고 ~는 0과 1을 바꿔버리는 기능을 하게 된다. 기본적인 논리 연산자는 &와 | 정도로 충분한데, matlab에서는 이의 확장 개념으로 any와 all 기능을 제공해주고 있다. any(x)를 하면 x라는 벡터의 원소 중 하나라도 1이 있으면 1을 반환하게 되고, all(x)는 x의 원소 중 하나라도 0이 있으면 0을 반환하게 된다. 즉, 각각 |와 &의 확장 개념으로 이해하면 된다.


(2) 흐름 제어문

 프로그램에는 흐름(flow)이 존재한다. 이 흐름을 조정하여 프로그래머는 자신이 의도한 기능을 구현하게 되는데, 조건문과 반복문이 존재한다. 여기서는 if와 for만을 다룰 것이다. 그 외에도 switch, while 등의 조건, 반복문이 있는데 if와 while로 모두 구현이 가능하기 때문에 굳이 알아놓을 필요는 없는 것 같다. 그래도 필요하다면 직접 찾아보도록 하자-_-

 1) if문 (조건문)

 사용법
       if (조건1)
           내용1
       elseif (조건2)
           내용2
       ...
           ...
       else
           내용n
       end

 주로 위에서 언급했던 연산자를 통한 식을 '조건'에 집어넣게 된다. 이 조건이 만족을 하여 1이 반환되면 if 바로 아래에 있는 내용 부분이 실행이 되고, 만약 1이 나오지 않으면 그 내용은 무시를 하고 그 다음줄 elseif에 있는 조건(조건2)을 검사한다. 이 조건이 만족하면 내용2를 실행하게 되고, 만약 이 조건도 성립하지 않으면 그 다음줄로 넘어가게 된다. 만약 if절 안에 나오는 조건 중 만족하는 것이 없으면 else 아래에 있는 내용이 실행이 되고, else가 없으면 아무런 동작도 취하지 않고 넘어가게 된다. if~end만 존재하고, elseif, else는 쓰지 않아도 상관 없다.

 2) for (반복문)

  사용법
        for i=a:d:b
            (내용)
        end

 i에 a를 할당하고 i가 b보다 크면 종료한다.
 내용을 실행한다.
 i에 a+d를 할당하고 i가 b보다 크면 종료한다.
 내용을 실행한다.
 i에 a+2d를 할당하고 i가 b보다 크면 종료한다.
 내용을 실행한다.
 ...
 i에 a+nd를 할당하고 i가 b보다 크면 종료한다.
 내용을 실행한다.
 ...

 즉, a를 초기값, b를 마지막 값, 그리고 d를 interval로 삼고, i에 해당 값을 할당해서 특정 내용을 반복해서 실행하도록 한다.
 d가 1일 경우 for i=a:b와 같은 형태로 생략 가능하다.

 for i=1:10
    disp('test');
 end

 와 같이 for문 안에서 i가 등장하지 않아도 된다. 위의 경우는 test라는 글자가 10번 나오게 된다.
 
이번 장에서는 기존의 다른 프로그래밍 언어를 다뤄본 사람이라면 쉽게 이해가 되는 개념들을 비교적 장황하게 써 놓은 것 같다. 이 다음 장에서는 Matlab의 powerful한 기능 중 하나인 'find'문을 다룰 생각이다. [Pis Workshop]

by pandland | 2011/08/21 02:06 | Matlab & etc | 트랙백 | 덧글(0)

<< 이전          다음 >>