본문 바로가기
매트랩(Matlab)/매트랩 강의

[Matlab / 매트랩] 10. m-file 만들기 // m-file의 입력과 결과 출력하기

by freezkim 2010. 2. 24.
[Matlab / 매트랩] 매트랩 강의 10번째
m-file 만들기 시리즈(3) // m-file의 입력과 결과 출력하기

이제 드디어 지긋지긋했던 m-file 만들기 대망의 마지막 단원입니다.

무려 4달도 더 걸린....할말이 없습니다.. 가드를....


아 뭔가 반성의 기운이 느껴지지 않네 흙흙ㅠ

이때까지 한걸 짧게 정리를 해보면 요렇네요.

m-file 의 기본적인 형태(7강)
m-file 작성을 위한 행렬 입력&출력법(8강)
m-file 작성을 위한 조건문의 사용(9강)

8, 9 강이 m-file의 본문을 채우는 내용이었다면
지금 할 10강의 내용은 m-file의 출력을 표시하는 부분을 다룰 겁니다.
(추가로 입력 부분도 조금 더 자세히 보도록 할 거구요.)

여기까지 끝내게 되면
데이터를 받아서 처리 해서, 어떤 출력값을 내 뱉어 주는 m-file을 만드실 수 있을 겁니다.

이 정도까지 하시면 진짜 매트랩 프로그래밍에 대한 뼈대는 갖췄다고 하셔도 과언이 아닐듯


자 그럼,
1. 출력에 대한 내용을 다뤄보고,
2. 입력을 받는 부분에 대해 좀더 자세히 다뤄보고

3. 예제 하나를 하는 걸로 마무리를 해보도록 할게요:)


1. 결과값 출력하기!!


  결과값을 출력하는건 '어디로' 출력하냐에 따라 두가지로 구분할 수 있을 것 같습니다.
  command window로 출력할 것인가 혹은 출력 변수로 출력할 것인가?


command window로 출력 한다는 것은 말 그대로, "command window 상에" 결과를 보여주는 것입니다.
command window에 m-file을 띄우는 예를 한번 들어볼까요?

이렇게 m-file을 만들고


암호같은 이름인 lec10ex1 이라는 이름으로 저장했습니다.

그리고 command window에서
>> lex10ex1

이라고 치면 요런 결과를 얻을 수 있습니다.


자 요런게 command window상에 바로 결과를 출력하는 거구요.

출력 변수로 출력한다는 것은 m-file의 실행 결과를
어떠한 '출력 변수'안에 넣어 버린다는 의미입니다. 앞전에 썼던 것 중에 meshgrid 같은 경우가 여기에 속하겠죠.



이런식으로 X,Y라는 출력 변수에 데이터가 저장되는 m-file인 것이죠.
요렇게 두가지로 출력 방식을 구분해서, 각각의 출력 방식에 따라 사용하는 명령어를 다뤄볼게요.

 



1) command window 출력 법

자 이 여기 희멀건한 창에 결과를 출력하기 위해서는 명령어 2개만 알아 두시면 됩니다
 (1) disp
   disp - display의 약자같은 느낌이 물씬 풍깁니다 그려 후후후
   이거 뭔가 대놓고 노골적으로 커맨드 윈도우에 출력하겠다는 느낌이 오지 않나요.
   사용법은 참 쉽습니다아?
   disp('출력하고 싶은 내용') 을 쓰면 그만이죵. 앞에 예에서 썼었어요. disp가 요기잉네?

        
 (2) sprintf
    sprintf는 9과 예제에서 마지막에 살짝 맛만 보여주고 말았는데, 요기서 한번 제대로 다뤄보도록 할게요.
    이거 무지 중요하니깐 잘 봐두세요. 무지 많이 쓰기도 하구요. sprintf 사용법이 좀 복잡하니 나눠서 설명을 좀 할게요.

     ① 첫번째 사용법 : 문장 출력하기
        sprintf( '출력되는 내용입니다' )

    
   sprintf를 쓴 후 작은 따옴표 (' ')를 하시고 그 안에 출력되는 내용을 적어주시면 되요. 여기까진 disp랑 같죠?
        다만 disp와 차이가 있다면, 
        sprintf의 결과는 "문자타입"의 "출력변수"가 됩니다. 직접 매트랩에 쳐서 비교를 해볼게요. 한번.

>> disp('출력')

            workspace에 아무것도 없죠?

>> sprintf('출력되는 내용입니다.')

              workspace에 문자타입의 출력 변수가 생겨 있습니다.

     ② 두번째 사용법 : 데이터 출력하기
          sprintf에 진짜 중요한 기능은 바로 요거죠. 데이터 출력하기라고 했는데, 뭔말이냐면 바로바로바로
          말 그대로 데이터를 '문자형식'으로 출력시켜주는 기능입니다.
          뭔소린지 직접 한번 쳐보죠. 

        
 sprintf('%데이터형식',어떤데이터)
          sprintf를 쓴 후 작은 따옴표(' ')를 하시고 %뭐시기 를 쓰게 되면
          "어떤데이터" 를 문자 type으로 변환시켜서 출력해 줍니다.
    

      
>> sprintf('%d', 1) 


       이렇게 하면 1 이라는게 출력이 되는데, ans를 보시면 아시겠지만 문자타입(char)으로
       지정이 되어 있는 것을 알 수 있습니다. 즉, 어떠한 데이터를 '문자'형식으로 변형해 주는거죠.


       이때 어떤 데이터인가에 따라 %뒤에 붙는 알파뱃이 달라지는데,
       주로 많이 쓰이는 형식은 다음과 같습니다:
           %d    : 숫자 타입의 데이터를 문자타입으로 출력시켜줍니다.
           %s    : 문자타입을 그대로 받아서 출력시켜줍니다.
           %x    : 16진수를 10진수로 변환시킨 후, 문자타입으로 출력시켜 줍니다.
  
    ③ 세번째 사용법: 위의 두가지를 섞어서!!
         위의 두가지를 섞어서 쓸 수 있습니다. 즉, 1)로 출력시키는데다가 2)의 %데이터형식을 쓰게 되면
         나머진 그대로 두면서 숫자만 바뀌게 쓸 수 있습니다. 보시죠 직접:

           >> for i=1:5
                sprintf('%d번째 문장입니다',i)
               end


           요건 잘 알아두시면 무지 유용하게 써 먹으실 수 있을 거에요. 노하우 공개!!두둥(?)
           요걸 효과적을 사용하는건 11강에서 한번 다뤄봅시다
               
            
         

 (3) 세미콜론 제거해서 command window에 출력하기
  요건 걍 뭐 명령어 쓰는건 아니구요.
  m-file 작성할 때 어떤 변수에다가 
세미콜론(;)을 찍어준다면 command window상에 그 결과가 출력되지 않지만
  만약 세미콜론이 없다면 그 결과가 그대로 출력되게 됩니다. 한번 예를 들어 볼께요.


  m-file을 이렇게 작성해봅니다.

    1;
    2
    3;
    4
   제목은 lec10ex2로 했어요.

   그리고 실행 시키면? 


   네 2,4만 출력되고 1,3은 출력이 하나도 안되죠ㅠ


   요걸 의도적으로(?) 이용해서 출력값이 command window상에 띄우도록 만들 수 있는거죠.
   저의 경우는 기본적으로 모든 줄에 세미콜론을 찍어 주되, 오류수정(디버그)할 때 세미콜론을
   하나씩 없애보면서 확인하는데 씁니다 (앗 이건 사생활인가....)


2) 결과를 출력 변수로 출력하기
네, 뭐 대단한건 아니구요. 그냥 m-file 만드는 기본 방법 있었잖아요??
흐읍 까먹은 분들을 위해 다시 한번 복습!!!!
  -------------------------------------------
  function 출력변수 = 함수이름(입력변수) 
  출력변수= 궁시렁 궁시렁
  --------------------------------------------
네 여기에, 출력변수 = 궁시렁 궁시렁 요렇게 해주는게 출력 변수로 m-file의 결과를 출력하는 거에요^^;
대단한걸 기대하셨다면 ㅈㅅㅈㅅ 언제 밥이나 한끼...

자 하지만 예전보단 좀 발전해야 겠죠! 출력 변수를 하나뿐만 아니라 여러개 출력 가능합니다.
요런 방식으로 말이죠.

function [x,y,z]=lec10ex3(A)
 x=A(:,1);
 y=A(:,2);
 z=A(:,3);

출력 변수에 행렬입력 형태로 [x, y, z] 로 해 주었습니다.
이렇게 되면 A라는 행렬이 입력으로 들어왔을 때, A의 1열, 2열, 3열의 데이터가 x,y,z로 출력되겠죠?

요걸 직접 A를 입력해서 확인해 보겠습니다.


 네 요렇게 행렬의 1열,2열,3열 성분이 각각 출력된 것을 확인할 수 있어요 :)

 자 그럼 요것으로 출력 부분은 마무리하고, m-file의 입력에 대해 조금더 자세히 다뤄본 후 예제 하나로 마칩시당!



2. 
m-file의 입력


7강에서 다 했던 건데 또하는 이유는.. 뭔가 다른게 있기 때문이겠죠ㅋ 요건 위의 출력과 마찬가지로 입력 변수도 여러개를 받아 줄 수 있습니다. 형식은 같아요.

m-file:
function X=lec10ex4(A,B,C)

X=A+B+C;

입력 변수에 콤마(,)를 이용해서 여러개를 받아 줄 수 있는거죠. 숫자 1,2,3 을 입력해서 결과가 나오나 볼께요


세개의 합이 나왔습니다. 요걸로 입력도 정복!! 신난다 이히~~!!


자 그럼
예제 하나를 하는 걸로 마무리를 해보도록 할게요

3. m-file 만들기 리얼 예제
요즘 또 리얼이 대세니 m-file도 리얼하게 만들어 보자구요.
무려 2차 방정식의 해를 구해주는 m-file을 짜봅시다.
위에서 배운걸 모조리다 써먹어 보자구요.

a*x^2 + b*x + c=0 의 해를 출력변수 2개로 출력 시킬거구요.
중근인 경우에는 "아싸리중근!!" 이라고 매트랩상에 출력을 해주는 겁니다.
요때 입력받는 건 a,b,c 즉 x의 계수입니닷!! 그럼 리얼 예제 정답 나갑니다 :

m-file 내용:
----------------------------------------------------------
function [rt1, rt2] = sol2eq(a,b,c)

%% a*x^2 + b*x + c=0
%% 02-10-2010
%% copyright @ all right reserved by freezkim

rt1= (-b+sqrt(b^2-4*a*c))/(2*a);
rt2= (-b-sqrt(b^2-4*a*c))/(2*a);

if rt1==rt2
 disp('아싸리 중근!!')
end

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

(만드실때 곱하기 기호 다 써 주셨는가 확인해보세요. 곱하기 기호 생략하면 에라나요!)

자 확인해볼께요~

>> [x1,x2]=sol2eq(1,2,3)



자 이것으로 m-file 만들기 강좌를 마치겠습니다.
이제서야 좀 다른 재밌는거 한번 해보겠군요. 재미를 위해서는 당장 gui로 넘어가고 싶지만.. 수치해석(방정식 푸는거 같은거...?)부터 하고 넘어갈지 어째야 할지 흠..흠 아무래도 gui는 매트랩의 끝인것만 같은 기분이 살짜쿵드니 목차대로 차근차근히 가도록 해볼게요(라고 하지만 언제 바뀔지는 알수없뜸 우왕키 굿키)



Tip!!! m-file을 만들 때 프로그램의 설명을 씁시다.

m-file을 만들 때, 주석처리를 해서 프로그램 설명하고
입력변수가 무엇인지 명시하면 좋겠죠?

주석처리를 %%를 많이 씁니다. 예를 들면 이런식입니다:

%%-----------------------------------------
%% solve 2th eq m-file code
%% input data a,b,c: a*x^2 + b*x + c=0
%% 02-10-2010
%% copyright @ all right reserved by freezkim
%%-----------------------------------------


(년도, 날짜, 프로그램 설명, 입력변수 설명 등등 맘대로..알아서 
copyright 2009 all right reserved by freezkim 이런건 걍...하나 새겨넣어주면 뿌듯합니다ㅋ)