본문 바로가기

Software/MATLAB

[MATLAB 연재] 4. 조건문과 반복문, 에러대비

본 강좌에 사용되는 MATLAB은 버젼7.9.0 (R2009b)을 대상으로 합니다.

if 문을 이용한 조건문의 구현 !

MATLAB에서 if문은 위의 문법을 따릅니다. expression자리에 조건이 들어가서 참이면 해당 statements를 실행하게 됩니다. 첫 if 문의 조건이 맞으면 해당구문을 실행하고 end하는 거죠. 아니면 elseif가 있다면 그 조건을 다시 검색하고, 아니면 else라도 실행을 합니다. elseif와 else는 사용자의 선택에 따라 있을 수도 있고 없을 수도 있습니다.

위 예제코드를 보면, I가J와 같다면, 행렬A의 (I, J)위치에 2를 저장하고, 아닐때는 I와 J의 차이가 1이면 (I, J)위치에 -1일 저장하고, 그것도 아니면 0을 저장하도록하는 예제입니다.

같다를 의미하는 '='기호는 프로그램에서는 변수의 저장을 의미하는 것이기 때문에 조건문에서는 특별히 '=='를 사용합니다. 그리고, 다르다(not equal)은 '~='을 사용합니다. 

for 문을 이용한 반복문의 구현 !

for 문의 문법은

입니다. init은 초기값이고, final은 끝값입니다. 1:10이라고 하면 1부터 1씩  증가하면서 10까지를 의미합니다. 여기서 증가간격을 조절하고 싶다면 n을 넣어주면 됩니다. 1:2:10이라고 하면 1부터 2간격으로 10까지가 됩니다.

위 예제를 보시면, 음... k가 정의되지 않앗네요. k=3정도로 두어도 되겠습니다. for문에서 m이 1부터 3까지 증가하도록 하고, 다시 그 안에 for문이 n이 1부터 3까지 증가하도록됩니다. 그리고 행렬 a에는 소정의 계산결과를 각 위치에 저장하도록 되어있네요.

그런데 for문을 사용할 때는 한가지 조심해야할 것이 있습니다.

위 코드와 실행결과를 보시면, for문의 변수가 k이고 1부터 2까지 증가하도록 되어있는게 보이실겁니다. 그리고, for문 안에 k=10이라고 갑자기 변경하고 있는 것이 보이실겁니다. for문의 반복조건이 k=2일때까지니까 한번만 실행되고 멈출것같지만, 그렇지 않습니다. 그렇지 않다는 것을 실행결과에서 보여주고 있습니다. 

try - catch 를 이용한 에러대비 !

MATLAB이든 어떤 언어든 에러를 만들지 않아야하는 것은 당연합니다. 그러나 어떤 경우는 해당에러를 코드내에서 모두 막을 수가 없는 경우가 있습니다. 사용자의 오판이나 일일이 예측할 수 없는 경우들인데요. 이럴때 에러코드자체를 피드백받아서 다시 수정된 코드를 실행할 수 있다면 꽤 괜찮을 것입니다. 이 때 사용하는 것이 try - catch 구문입니다. 

위 코드는 try- catch 구문의 사용 예입니다. (출처는 도서출판 아진의 임종수 님의 책을 참조했습니다.) 1행의 clear all은 work space의 모든 변수를 삭제합니다. 그리고 try구문안에 에러가 있을지 모르는 구문을 넣어 둡니다. 4행은 문제 없지만, 5행에서는 에러가 나타납니다. z라는 변수가 갑자기 나타났기 때문인데요. 어떤 값을 저장하고 있는지 선언되지 않았기 때문입니다. 이때 에러메세지를 내고 실행을 중단하는 일반적인 형태를 벗어나서 catch구문의 내용을 실행하게 됩니다.

실행한 결과입니다. catch구문의 7행이 실행되었음을 알 수 있습니다. 그리고 exception이라는 변수가 하나 더 생겼는데요. 이것을 열어보면

에러 코드가 UndefinedFuntion이라는 것을 알 수 있습니다. 이를 이용해서 if문을 적절이 사용하면 원하는 에러에 대해 각기 다른 행동을 하도록 catch안에 작성할 수 있습니다.

위와 같이 실행하면, A와 B는 열의 숫자가 맞지 않아서 C로 통합될 수 없다는 에러가 나타납니다.

 

위와 같이 작성할 수 있습니다. 위 예제는 matlab help에 있는 예제로 catch안에서 if문으로 어떻게 에러코드를 검색하는 지 보여줍니다.

 

identifier항목을 확인하도록 if문이 꾸며져 있다는 것을 확인하실 수 있습니다.

 

실행결과입니다. 아.. if안에 있는 strcmp명령은 문자열을 비교하는 것입니다. 일치하면 참을 피드백합니다.

tic - toc 을 이용하여 코드의 실행시간 측정하기 !

MATLAB에서는 특정코드의 실제 실행시간을 측정해서 그 결과를 알려주는 기능이 있습니다. tic - toc이라는 구문인데요.

 

위의 코드를 보면, 1/n^2을 n을 1에서 100000까지 변화시켜가며 더해주는 루틴입니다. 하나는 for구문으로 짜여져 있고, 또 하나는 Dot(.)연산자를 사용해서 for없이 구현하고 있습니다. 측정하고자하는 루틴을 tic-toc으로 둘러싸면 됩니다.

 

그러면, 위와 같은 형태의 결과를 얻을 수 있습니다. 넷북이라 그런지 꽤 실행속도가 느리다는 것을 알 수 있습니다..ㅜ.ㅜ 그래도 같은 기능이라면 for문으로 구현한 것이 아주 느리다는 것을 알 수 있습니다. 그래서 간혹 MATLAB의 고수를 만나면 for를 사용했는지 아닌지를 가지고, 실력의 우위를 판단하려는 경향을 볼 수 있습니다.(^^)

MATLAB 04. 조건문과 반복문.pdf

반응형