for 반복문이 정해진 횟수만큼의 반복 수행을 한다면 while 명령은 명령군을 무한 번까지 반복할 수 있다. while 뒤의 조건이 참이면 속한 명령어들을 계속 반복 수행하게 된다. 사용법은 다음과 같다.
while 조건문명령문1명령문2⋮end |
1부터 100까지의 합을 구하는 프로그램을 while문을 이용하여 작성해보자. 다음 프로그램을 ‘whilex1.m'으로 저장하고 명령창에서 수행해 보자.
clear alln=1;m=0;while (n<=100)m+=n;n++;end |
여기서 n++ 는 n=n+1 과 같고 m+=n 은 m=m+n과 같다.
다른 예로서 n이 양의 정수일 때 n! 이 106 을 넘는 가장 작은 n을 구하는 프로그램을 while문을 이용하여 작성해보면 다음과 같다.
1: clear all2: n=1;3: while prod(1:n)<1e64: n++;5: end |
3번 줄에서 n!이 106보다 작으면 n을 1증가시키고 (n++) 다시 3번 줄의 조건을 수행하는데 만약 n!이 106보다 크면 바로 프로그램이 종료가 된다. 따라서 프로그램의 수행이 끝난 시점에 변수 n에 저장된 수가 106을 넘는 가장 작은 정수가 되는 것이다.
또 다른 예제를 들면 다음과 같다. 편의상 각각의 줄 앞에 번호를 붙였다.
1: clear all2: num=0; EPS=1;3: while (1+EPS)>14: EPS=EPS/2;5: num=num+1;6: end7: disp(EPS) |
1번 줄에서 작업 공간의 모든 변수를 제거하고 2번 줄에서 변수들을 초기화 시켰다. 그리고 3,4,5번줄은 EPS가 컴퓨터가 더 이상 구분할 수 없이 작아질 때까지 EPS를 2로 계속 나누면서 반복하는 것이다. 이것은 내부변수 eps를 구하는 알고리듬을 구현해 본 것이다. eps는 MATLAB이 표현할 수 있는 가장 작을 수라고 앞에서 소개했었다. 일반적으로 실수를 표현하는데 있어서 한정된 비트수를 쓰기 때문에 기계 내부적으로 표현할 수 있는 가장 작은 수가 존재한다.
while문의 조건문은 결과가 스칼라일수도 있으나 일반적으로 행렬일 수도 있다. 이 경우 행렬의 ‘모든’ 요소가 참(0이 아닌값)일 경우에 반복문을 수행하게 된다. 즉 하나라도 0인 요소가 있으면 반복문의 수행을 중단하게 된다. 다음 예제를 입력하고 ‘whilex3.m'으로 저장한 후 실행시켜 보라.
a = ones(2,2);b = 4*a;while bb = b-a;end |
처음의 두 실행문에서 행렬 a와 b는 다음과 같이 각각 생성된다.
그리고 처음의 while문에서 행렬 b의 모든 요소는 0이 아니므로 반복문이 수행되고 그 결과로서 행렬 b는 다음과 같이 변하게 된다.
그 다음 아직도 행렬 b의 모든 요소는 0이 아니므로 반복문이 수행되고 그 결과로서 행렬 b는 다음과 같이 변하게 된다.
그 다음 다음번의 수행에서 행렬 b는 다음과 같이 변하게 되고
이제는 행렬b의 모든 요소가 0이므로 반복문을 수행하지 않고 while문을 빠져 나오게 된다.
'프로그래밍언어.Lib > MATLAB' 카테고리의 다른 글
MATLAB의 함수 m파일 (0) | 2015.07.16 |
---|---|
MATLAB의 break, continue 명령 (0) | 2015.07.16 |
MATLAB의 반복문 for ~ end (0) | 2015.07.14 |
MATLAB의 조건문 switch ~ case ~ end (0) | 2015.07.13 |
MATLAB의 조건문 if ~ elseif ~ else ~ end (0) | 2015.07.13 |