獨斷論

조건문 if switch와 순환문 for while에 대한 간략 설명 (Matlab 사용법 4) 본문

과학과 기술/Matlab

조건문 if switch와 순환문 for while에 대한 간략 설명 (Matlab 사용법 4)

부르칸 2015. 3. 31. 10:37

조건문 if switch와 순환문 for while에 대한 간략 설명 (Matlab 사용설명서 4)

Matlab을 쓰다보면 가끔 if문을 쓰거나 switch문을 써서 조건에 따라 계산해야 할 필요가 있다. 또한 matlab은 기본적으로 vector와 matrix로 계산하므로 for나 while은 그렇게 쓸일이 없지만 꼭 써야하는 경우가 발생하기도 하므로 알아두어야만 한다.

조건문 if

if의 기본적인 문법은 다음과 같다.

if 조건식

    문장

elseif 조건식

    문장

else

    문장

end

elseifelse는 필요없다면 생략해도 된다.

elseif는 띄어쓰는게 아니라 붙여써야 한다는것을 기억해두어야 한다. 


이제 조건문 if를 써서 간단한 script를 작성해보자.

아래 matlab script는 변수 a에 10이라는 값을 넣고 10보다 크면 large라고 출력하고 10보다 작으면 small이라 출력하며 10이면 Exact를 출력하는 것이다.

1

2

3

4

5

6

7

8

9

10

11

   a =  10;
 
   if a > 10
       disp('Large')
   elseif a < 10
       disp('Small')
   elseif a == 10
       disp('Exact')
   else
       disp('Error')
   end

문법이 쉬워서 설명할 것은 그렇게 많지 않다.

크다는 >로 나타내고 작다는 <이고 같다는 ==이고 같지 않다는 ~=이다.

9행과 10행에 마지막 모든 논리조건에 해당되지 않으면 Error라고 출력하도록 하였는데, 이러한 문장을 써 넣는 버릇을 들여야지 실행에러를 찾기도 편하고 실행에러로 인하여 밤새는 일이 없다.


조건문 switch

if로 만드는 복잡한 조건문을 switch를 쓰면 단순하게 해결할수있다.

기본 문법은 아래와 같다. 아래 조건식이라고 하였지만 굳이 조건식일 필요는 없다. 영어로 expression인데 한국말로 번역하기 까다로워 그냥 조건식이라고 한것이니 그냥 넘어가자.

switch 조건식
   case 조건식
      문장
   case 조건식
      문장
    ...
   otherwise
      문장
end

예를 들면 아래와 같다. 

1

2

3

4

5

6

7

8

9

10

11

12

  i = 1;


   switch i
      case 1
          disp('positive')
      case -1
          disp('negative')
      case 0
          disp('zero')
      otherwise
          disp('other value')
  end

i의 값이 무엇이냐에 따라 positive, negative, zero, other value를 출력하는 것이다.

C/C++과 같이 switch~case를 이용하여 양이냐 음이냐의 조건식을 넣을수 없다.

이럴때는 if~elseif를 사용하자. 


순환문 for

순환문 for를 이용하여 50개의 난수를 3번 발생시켜 각각의 평균 3개를 구하고 평균 3개의 평균을 구하는 script를 완성해보자. 순환문 for를 사용하지 않는다면 같은 문장을 세 번 연달아 써야만 하지만 순환문 for를 한다면 더 말끔하게 정리할 수 있다.

기본 문법은 아래와 같다. 

for 순환계수 = 범위
   문장
end

난수 50개를 3번 발생시키는 script를 작성하기 전에 좀더 쉬운 예로 1부터 10까지 합을 구하는 script를 작성해보자. Matlab에서는 아래와 같은 식으로 for문을 돌리는 것은 실행속도만 오래걸리므로 사용하지 않는다는걸 명심하고 그냥 for문을 이해를 돕기 위해 작성한 것이라고만 이해해 두자. 

1

2

3

4

5

   sum = 0;
   for i = 1:10
       sum = i + sum;
   end
   disp(sum)

C나 FORTRAN에 익숙하다면 위의 프로그램을 쉽게 이해할수 있을 것이다. float나 double이냐 integer인지도 상관하지 않고 matlab이 알아서 double형으로 isum 변수를 선언해버렸다. sum을 0으로 초기화하면서 i를 1에서 10까지 1씩 증가시키면서 sumi를 더한 후에 sum의 값을 출력하면 1에서 10까지의 합이 계산된다.


이제 위의 문장이 이해가 된다면 50개의 난수를 3번 발생하여 3개 평균과 또 3개 평균의 평균을 구하는 script을 작성해보도록 하자. 

1

2

3

4

5

6

7

8

9

   npoints = 50; % the number of random numbers
   nsamples = 3; % the number of the generation

   for i = 1:nsamples
       currentData = rand(npoints, 1);
       sampleMean(i) = mean(currentData);
   end

   totalMean = mean(sampleMean);

1행에서 난수의 sample size를 50개로 정하고 그 난수를 3번 발생시키기 위하여 nsamples를 3으로 넣었다.

4행에서 i에 1부터 3까지 1씩 증가시키도록 하였고

5행에서 난수를 발생시켜 currentData에 넣었으며

6행에서 그 평균을 구하였다.

for 문을 실행하고나면 sampleMean은 3x1의 벡터가 된다.

그리고 9행에서 sampleMean에 대한 평균을 구하여 totalMean에 대입했다. 


순환문 while

순환문 while을 사용하여 factorial을 계산해보도록 하자.

while문의 기본 문법을 아래와 같으며 조건문이 참일동안만 while문 안에 있는 문장을 실행하게 된다. 

while 조건문
    문장
end

아래 script는 4! = 4x3x2x1을 계산하는 script이다.

1

2

3

4

5

6

7

   n = 4;
   f = n;
   while n > 1
       n = n - 1;
       f = f * n;
   end
   disp(f)

1행과 2행에서 4!를 구하기 위하여 4를 nf에 대입하고

n이 1보다 큰동안 n을 하나씩 감소시켜가면서 f에 곱하면 4!이 계산된다. 












Comments