강좌 순서

1. MATLAB 각 Window 사용법 [바로가기]
2. M-File을 사용한 기초연산법 및 데이터의 그래픽 출력 [바로가기]
3. 데이터의 3D 출력 [바로가기]
4. 조건문 및 반복문의 사용. 에러대비 [바로가기]
5. Simulink의 기초 [바로가기]
6. Simulink의 기초 2 [바로가기]
7.  Function 문의 사용 [바로가기]
8. 동역학 시뮬레이션하기 [바로가기]
9. 애니메이션 구현하기 [바로가기]
10. 애니메이션을 이용한 동역학 시뮬레이션하기 [바로가기]
11. LQR 툴박스를 사용하여 제어기 구현하기 [바로가기]
12. GUI 시작하기 - Static, Edit Text 및 Push Button [바로가기]
13. GUI - Slider 사용하기 [바로가기]
14. GUI - List Box와 Pop-up Menu [바로가기]
15. GUI - Check Box와 Radio Button [바로가기]
16. GUI - 종합 예제 [바로가기]

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






   콜론( : ) 연산자 !  
 


위에서처럼 1:5라고 명령을 주면 1부터 5까지 1간격으로 ans라는 변수에 저장이 됩니다.이때 콜론(:)이 하나만 들어가면 자동으로 1간격으로 잡아주게 됩니다.


위에서 처럼
1:
1:0.5:2라고 하면 1부터 0.5간격으로 2까지 잡게 됩니다.




   행렬 만들기 !  
 

MATLAB에서 행렬을 만들때, 세미콜론(;)이 행구분이 됩니다.

 
위에서 처럼 명령을 주면 3*3크기의 행렬이 만들어 집니다. 콤마(,)는 열구분에서 사용되는데 안써도 되지만, 보기 편하기 구분을 주기 위해서라면


으로 명령해도 같은 결과가 나타납니다.

 
만약 행렬을 만들때, 행이 너무 길어서 구분짓기 어렵다면 위에서처럼 엔터키로 구분할도 있습니다. 하지만, 세미콜론(;)으로 행구분을 하는게 좋습니다. (습관적으로..^^)


이렇게 말이지요.




   Dot( . ) 연산 !  
 


위 결과를 한번 보죠. A라는 변수에 콜론 연산을 통해서 1부터 5까지를 저장합니다. 이런걸 행벡터라고도 하는데, 그냥 큰 범위로 1*5의 크기를 가지는 행렬이라고 하죠. B도 같은 크기의 행렬을 지정했습니다. 그러면, A와 B 행렬을 곱하면 (고등학교 수학으로 돌아가 기억을 더듬어보면) 곱할 수 없습니다. 그러니 에러가 나죠.


그러면, 굳이 곱하고 싶다면, A행렬과 B행렬의 전치(transpose)행렬을 곱해주면 됩니다. 그러면 위와 같은 결과가 나오겠지요. 그런데, 제 목적이 만약 A행렬의 첫 요소와 B행렬의 첫 요소를 곱하고, 두번째들끼리 곱하고 하는 것만 하는 거라면...


위와 같이 DOT( . )연산자를 사용하면 됩니다. dot 연산은 요소별로 계산을 해줍니다.




   Plot 명령을 이용한 그래픽 출력 !  
 


위 명령에서 t에는 0부터 2pi까지 0.01간격의 숫자들을 저장합니다. 그리고, y라는 변수에는 sin(t)를 지정했네요. 그러면, t는 1*629의 크기를 가지는 행렬이고, y도 같은 크기를 가지는 행렬이 됩니다. 그리고 plot명령으로 그래프를 그릴 수 있는데, 일단 가장 간단히 그리는 법은 

plot(X축데이터, Y축데이터)

라고 입력해주는 것입니다. 여기서는 X축은 t가 되고, Y축은 y값이 될것이죠.


위 그림이 실행결과입니다. 좀 심심하죠?^^


이제 격자 기준선들을 넣어보죠.
grid라는 명령입니다. grid on이라고 명령을 주면


이렇게 기준선이 나타납니다. 


또, 각 축에 label을 달아보겠습니다. 각 축에 라벨을 다는 명령어는  xlabelylabel입니다. 위와 같이 입력을 하면


이렇게 나타납니다. title이라는 명령을 이용하면 그래프의 제목을 달아줄 수도 있습니다. 


이렇게 해주면

 
이렇게 되죠. 이제

 
y1=cos(t)라고 하고, y1을 겹쳐서 그려보겠습니다. 속성에서 겹쳐그리기를 허용하는 것이 hold on 이라는 명령입니다. 그리고, 같은 색으로 그리면 좀 그러니 빨간색으로 그려보도록 하죠. 위와 같이 추가로 다시 입력하면

 
으로 나타납니다. 그런데,  그래프가 축에 꽉차서 좀 보기가 그렇네요. 그래서 축의 범위를 좀 수정해야겠습니다.  그 명령어가 axis 명령입니다.


axis 명령은 x축의 최소, 최대, 다음으로 y축의 최소, 최대값을 입력하면 됩니다. x축은 0부터 2pi까지, y축은 좀 여유를 두기 위해 -1.5부터 1.5까지로 설정하죠. 그러면


으로 나타납니다. 좀 보기 편하죠. 다음으로 각 선의 역활에 설명을 달아줘야겠네요. 이때 사용하는 명령어가
legend입니다. 


이렇게 입력해두죠. 그린 순서대로 달아주면 됩니다.


이렇게 그림이 나타납니다. 



다양한 설정들은 다시 이야기하고, 좀 더 편하게 설정하는 방법을 보면


저 figure창에서 표시된 부분의 아이콘을 누르면


와 같이 창이 변경됩니다. 그러면, 파랑색선을 클릭하고


이렇게 각종 설정을 바꿔줄 수 있습니다. 위에서는 굵기를 바꾸었네요.


그리고 위에 표시된 아이콘을 누르면 원래대로 돌아갑니다. 그런데 혹시 느끼셨나 모르겠는데 이번글의 포스팅에서 나타나는 그래프들이 꽤 모양이 깔끔하죠?^^. 단순히 화면 캡쳐를 한것이 아닙니다. Figure창이 지원하는 Copy기능을 사용한 것이죠. Figure창에서 Edit 메뉴에서 Copy Figure를 선택하고


붙여넣기를 하면


이렇게 깔끔한 그래프가 나타납니다.^^


http://pinkwink.kr/trackback/266 관련글 쓰기
  • 분홍별장미 2010/03/04 13:02

    으....... ㅠ.ㅠ 두통약이 필요한 글이네요.. 죄송합니다 (--)(__)
    따로 드릴말씀이 없네요 ㅠ.ㅠ

    • PinkWink 2010/03/04 13:11

      저런... 꼭 댓글을 안달아놓으셔도 되는건데
      (이건 수업자료라서....^^)
      그래도 재미있지 않나요?^^

  • 탐진강 2010/03/07 20:12

    10가지 강좌 중 두번째군요.
    대단하시네요. 10가지나 준비하다니.

    • PinkWink 2010/03/08 09:17

      10개의 테마이긴한데...
      몇개의 글이 될지는 잘 모르겠어요...ㅎㅎ^^

  • 2010/03/09 02:16

    너무 잘봤습니다... 과제하는데 도움이 될것 같아요 감사해요..
    다음자료는 언제 또 올라오나요?^^

    • PinkWink 2010/03/09 03:26

      다음자료를 올리고 이 댓글을 확인했네요^^
      아마 일주일에 두세개정도가 목표인데요. 잘될지는 의문입니다.^^

  • 심심한아이 2010/03/13 19:18

    우왁!!!! 이렇게나 설명을 잘해주시다니ㅠㅠ 감사합니다~

    거기다 최신버전으로!!ㅎㅎ 열심히 공부하겠습니다~

    기대할게요~!!!

    • PinkWink 2010/03/14 16:08

      열심히 공부하시는데 조금이나마 도움이 된다면 저 역시 기쁩니다...^^

  • 걸음마전뜀박질 2010/03/16 00:49

    저희 학교에서도 matlab하는데 기초는 안가르쳐줘서...
    이렇게 유용하게 공부하고 있습니다......
    앞으로 계속 기대하고 있을게요~~~ㅎㅎ

    • PinkWink 2010/03/16 06:20

      네... 감사합니다. 좋은 공부가 되셨기를 바랍니다...^^

  • 맥스 2010/03/27 00:52

    정말 누가 가르쳐주는 사람없는데
    이블로그는 혼자 공부하는 사람에게 너무나 큰 도움이 되는 곳이네요
    감사합니다 수고하세요~

    • PinkWink 2010/03/27 16:03

      감사합니다.. 공부의 좋은 성과가 있기를 바랍니다..^^

  • dy 2010/04/14 11:26

    시험준비하는데도움이되네요 감사합니다^^

  • sp 2010/05/05 10:32

    설명정말 자세하고 과제하는데 도움이 많이되네요
    좋은자료 정말감사합니다.^^

  • 질문! 2010/05/06 19:21

    저 그림 그대로. 4pi 까지 만들어야하는데 그대로 쓴후, 2*pi 를 4*pi로 고쳐도 x축은 12.?? 까지 있는데 그래프는 2*pi 에서 끊겨있네요.. 어떻게해야하죠? 그리고, tan(x),e^x,ln(x) ,y=sinx+sin2x+sin3x+sin4x+sin5x+sin6x 도 위와같은 식처럼 하면되나요?

    • PinkWink 2010/05/07 10:17

      axis 명령에서도 4pi라고 변경되었는지 확인해주세요..
      그리고, 어떤 수식이든 위 포스팅처럼 뭐 하시면 될 것입니다만, 곱하기가 들어가는 경우 행렬의 곱셈으로 수행할 위험이 있으므로, dot(,) 연산을 하시길 바랍니다. *가 아니라 .*^^

  • 감사합니다. 2010/05/20 20:59

    매트렙 처음쓰는데 참 도움이 많이되네요^^
    보통 댓글 잘 안쓰는데 너무 잘 해주셔서
    감사한 마음을 표현안할수가 없네요 ㅎㅎ
    감사합니다.

    • PinkWink 2010/05/20 21:30

      많은 도움이 되었다니 저 역시 기분이 좋습니다...
      계속 많은 기능을 소개하도록 해보겠습니다.^^

  • 우와 2010/08/20 14:23

    너무 좋은데요
    제가 잘 몰라서요..
    plot(t, y) 을 해준후에 grid on 을 하면 그래프는 없어지고 격자만 생겨요
    마찬가지로 xlabel을 하면 격자는 없어지고 x축 라벨만 생기구요 ylabel을 하면 xlabel과 격자 다 없어지고 y축라벨만 생기는 이런식이네요
    왜 그런거죠?

    • PinkWink 2010/08/21 12:22

      음.. 처음 듣는 현상이라 저도 잘 모르겠습니다.ㅠㅠ

  • 엘리 2010/08/21 00:36

    혹시 이 자료로 스터디를 하려고 하는 사용 해도될가요??
    메트랩 기초부터 차분히하려고 합니다 ^^
    좋은주말보내세요~

    • PinkWink 2010/08/21 12:25

      네.. 출처만 밝혀주신다면.. 괜찮습니다.^^

  • 민우 2010/10/08 23:54

    감동 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

    흑흑 ㅠㅠㅠㅠㅠㅠㅠㅠ

  • 미르 2010/10/10 23:48

    x=3*exp(-2*t).*stepfun(t,0)에서 e랑 단위계단함수랑 곱할때 *로 하면 오류가나길래 .*로 했더니 되더군요 근대 왜 .x로 넣어야하는지 가르쳐 주실수 있으시나요 ㅎ ^^;;

    • PinkWink 2010/10/18 14:04

      아마.. t가 하나의 숫자가 아니라 행렬(벡터)로 선언되었을 겁니다. 그럴때, 행렬로 생각을 해보시면, 행렬곱이 되도록 적절히 transpose를 시키든지 해야하구요. 일반적으로 각 순서별로 연산을 하고 싶다면 dot(.) 연산을 하셔야하죠

  • 임초보 2011/01/19 19:11

    function내에 figure창을 열어 놓은 상태에서 menu를 불러 오려는데 안되네요. 에러도 없이 말입니다. prompt상에서는 menu 가 먹히는데 왜 그럴까요?
    하루 종일하다 글 올림니다.

    • PinkWink 2011/01/21 15:47

      음... get명령으로 불러지지 않던가요??

    • 임초보 2011/01/22 12:14

      choice=menu('select...','pie','pie3'...);
      switch choice
      case 1
      piefun()
      <중간생략>
      그리고 fuction piefun()에서 pie graph를 그리고 난 후에 속성 창을 새로 열어 colormap이나 뭐 다른 속성을 지정하려고 또 menu창을 불렀는데 허거덩...그냥 사라져버려요. figure창만 덜렁 남아 있고...get으로 menu를 읽어 올 수 있나요?<-넘 바보 같은 질문같아요. 엉엉엉 해결 못본채로 끙...혼자 공부가 넘 버거워요.

    • PinkWink 2011/01/22 21:35

      function 문 안에서 선언된 변수(혹은 속성 혹은 개체)는 function 외부에서는 불러지지 않습니다. 해당 개체를 function의 출력에서 선언하든지 혹은 글로벌로 사용을 하시든지 혹은 일시적인 사용허가를 주셔야합니다.

  • wow21star 2011/02/16 13:05

    좋은 자료 감사합니다. 잘 보고 갑니다.
    많은 도움이 되는 글이에요.^^

  • pigret 2011/02/24 23:03

    MATLAB을 처음 시작하려는데... 정말 꼼꼼하게 써주셨네요 ^^) 앞으로 자주 들를거같아요ㅎ, 잘보고갑니다~

    • PinkWink 2011/02/25 12:20

      네.. 도움이 되었다니.. 저도 기쁩니다.
      좋은 공부하시길 바랍니다.^^

  • 정인 2011/03/05 04:05

    저.. 3차원공간에서 원점에서 어떤 점까지 두점사이의 직선을 넣고 싶은데, 잘 안되서.. 핑크윙크님께 또 도움을 부탁드려요. 어렵지않으시면 좀 가르쳐 주세요.

    • PinkWink 2011/03/07 08:47

      1. 원점에서 어떤 점까지 두점을 이은 직선?
      2. 원점과 어떤 점 사이의 또 다른 어떤 두 점을 이은 직선?
      어느것인가요?
      어느것이든.. 두점을 이을 직선을 만드는 것은 두점이 정해졌으니 line명령으로 쉽게 이을 수 있습니다. line명령의 사용은 help line으로^^

  • ㅇㅊ 2011/03/18 11:41

    정말 도움많이 되고있습니다ㅋ
    그런데 중간에 읽어보니 역할을 역활이라고 써두셨더군요...ㅋㅋ

    • PinkWink 2011/03/18 11:50

      ㅎㅎ.. 그런가요? 저런... 뭐.. 그런 재미라도 있어야.. 읽는 재미가.. ㅎㅎㅎ 이렇게 말씀드리면 이상하겠죠^^... 하여간 감사합니다.^^

  • 메틀랩 2011/03/26 11:25

    function hw11(t)


    if(t<0)
    y = 0;
    fprintf('t=%d y=%d\n', t, y)


    elseif(t >= 0) && (t<5)
    y = t;
    fprintf('t=%d y=%d\n', t, y)

    elseif(t>=5)
    y = (t-5)^2 + 5;
    fprintf('t=%d y=%d\n', t, y)

    end

    polt(t,y)
    이걸로 그래프를 그리고싶은데 그래프를 못그리겠어요 ㅠ
    방법좀 알려주시면 안될까요?

    • PinkWink 2011/03/28 09:56

      맨마지막 polt는 오타겠죠??^^
      이 코드는 함수니까.. hw11.m으로 저장시키고,
      이 함수를 불러와서 t에대가 뭔가 수치를 벡터(행렬)로 넣어주면 되죠..^^

  • 2011/03/30 11:07

    비밀댓글입니다

    • PinkWink 2011/03/30 11:32

      관련글은 http://pinkwink.kr/358 입니다.
      그리고, 공지사항의 주의사항을 읽어주세요

  • mahasports 2011/04/04 23:12

    정말 감사해요 그리고 사랑해요

    • PinkWink 2011/04/05 08:23

      헉.. 사랑까지....^^ 뭐 하여간 좋은 자료였다니 감사합니다.

  • 열심군 2011/04/13 23:50

    [12 Σ (-1)^n/n^2]^(1/2) (시그마는 n=1 ~ m까지고 m=1,2,3, ... m )

    위 식을 edit에서 설정을 했는데요

    function y = test ( m, n ) %test 괄호에 m,n 값을 어떻게 정하는지
    모르겠구요;;

    y = 0;

    for n = 1:m-1

    y = (12 * ( y + ((-1)^n / n^2 ) ) ) ^( 1/2 );

    end

    이렇게 해서 오류나서 틀린 걸 알겠는데 어떻게 수정을 해야될까요?

    초면에 많은 부탁드립니다 ;; ㅋ

    • PinkWink 2011/04/14 09:59

      symbolic 연산을 할 것이 아니라면, 당연히 m값이 정해져야할 것입니다. 그리고, 위 함수에서 왜 m,n두개를 받죠? n은 1부터 m까지니까 입력변수는 m만 받으면 될 것 같은데요.

    • 열심군 2011/04/14 21:03

      많은 도움이 됐습니다.
      고맙습니다.

    • PinkWink 2011/04/15 17:33

      답변에서 약간 보강하면, for 문의 m-1에서 m이 정의되지 않았습니다.
      원하는 결과가 나오는가를 떠나서 문법적 오류만 말씀드린다면 그렇습니다. (m-1)대신 숫자를 지정하시면 문법적 오류가 없어집니다.
      혹시 symbolic연산을 원하신다면, m을 syms로 지정하셔야하지만, 그 결과가 어떻게 나올지는 테스트해보지 않아서 뭐라 드릴 말씀이 없습니다. 좋은 공부되시길 바랍니다.

  • 열심 2011/05/25 10:45

    간단한 질문하나 할게요
    [ 1 0 3; 1 0 3; 1 0 3; 2 0 4; 2 0 4; 2 0 4] 인 행렬을 [2 0 3; 2 0 3; 2 0 3; 4 0 1; 4 0 1; 4 0 1] 로 바꾸는 코드가 있나요? 1 열 1:3행 과 3열 4:6행을 swap 하는것인데, 힘드네요

    • PinkWink 2011/05/25 18:46

      그와 같은 명령어가 있는지 모르겠습니다. (MATLAB이 워낙 명령어가 많으니...ㅠㅠ) 그런 명령어가 없다고 해도, 임의의 변수에 임시로 원하는 행을 저장해 두고, 변경하도록 코드를 작성하면 될것으로 보입니다. A행렬의 1행과 3행을 바꾼다면

      temp = A(1, :);
      A(1, :) = A(3, :);
      A(3, :) = temp;

      뭐 이렇게 하면 될까요... 하여간 이런식으로 해주면 될겁니다.

  • 황진철 2011/07/22 15:28

    정말! 처음으로 맷랩을 접하는데 단비같은 자료입니다. 감사합니다.

  • 감사합니다 2012/01/10 22:12

    교수님보다 훨씬 나은듯 !! 잘배워갑니다 이번방학떄 여기서 공부많이해야겟어요!!

    • PinkWink 2012/01/11 13:14

      전문적으로 강의하시는 분들과 비교될 순 없겠죠...
      아무튼 작은 도움이라도 되었다니 다행입니다.

  • 오늘 처음 시작 2012/02/01 00:56

    정말 도움이 많이 되네요!! 감사합니다 ㅎㅎ

  • 임택규 2012/07/30 17:37

    matlab을 처음써보는 (아마 대학땐 해 봤을텐데 기억이...ㅜㅠ) 30대 중반 회사원 입니다.
    정리를 너무 깔끔하게 잘 해두셔서 공부하기 너무 좋습니다.
    혹시 권할만한 책 있으시면 몇권 추천 부탁 드립니다. ^^

    • PinkWink 2012/07/31 11:40

      사실 저도 수업교재로 채택한적이 있긴합니다만,
      사실 MATLAB만큼은 책보다 document의 tutorial을 추천합니다. 영문이긴 하지만, 그냥 예제를 하나씩 따라가기 좋거든요

  • 이강현 2012/09/11 13:05

    좋은 자료 감사합니다 ㅋ 잘 보고 갑니다~

  • 김용태 2012/09/21 18:03

    좋은 자료 감사합니다. 처음 사용하는데 쉽게 설명해 주셔서 잘 따라하고 있습니다. ^^

    매트랩을 이용해서 전기화학 프로그램을 짜려고 하는데, 이런 기능도 가능한가요?

    • PinkWink 2012/09/24 09:04

      맷랩이 해당 분야를 지원하지 않는다고 안되는 건 아닙니다.
      수학적 모델을 시뮬레이션 하는 것에 장점을 가지는 아이거든요.
      뭐든 어떤 분야든 수학적 모델이 있다면 다 시뮬레이션이 가능합니다.

  • 규난 2012/09/26 08:07

    감사합니다. 메카트로닉스과를 나와서 이런쪽에 관심이 많은데 좋은자료 감사합니다.

  • 감사해요 2012/10/08 00:55

    정말 감사합니다. 맨땅에 헤딩하는 꼴이었는데, 하나부터 차근차근 알려주시네요. 평생 복 받으실거예요.

  • 백진우 2013/09/12 19:20

    완전 친절하게 설명해주시네요
    블로그에 리플달기는 첨이라 뭐라고 써야 하는지 잘 모르겠지만
    제 노트북에 즐겨찾기 추가시켜놨습니다.
    그냥 눈팅만 하고 가기에 너무 죄송해서요 ㅠㅠ
    감사합니다.

    • PinkWink 2013/09/12 20:42

      어이쿠.. 칭찬 감사합니다.
      그렇게까지 좋은 글인지는 잘 모르겠습니다만
      그래도 도움이 되었다니 다행입니다.^^

  • MATOS 2014/02/17 15:49

    자세한 설명 감사드리며, 질문 드립니다!!
    위 그림에서 만든 sin(t)라는 그림에 random noise를 발생시켜서
    그 noise를 더해 주고 싶은데요. 그 sin(t)에 5%의 에러를 만들 random noise요..
    rand 함수를 사용하면 될 것 같긴한데.. 어떻게 해야할까요?ㅜ

    • PinkWink 2014/02/17 17:13

      댓글의 편의상,
      sin함수의 결과는 sin이라고 하고, 0~1사이의 랜덤변수의 결과는 rnd이라고 하고, sin의 크기는 1이라고 하면

      sin - (rnd * 0.1 - 0.05) 로 하면 대충 되지 않을까하는데요.
      하도 오랜만에 코드를 생각했더니 좀 가물가물 합니다만^^

      그러나 이걸 설명하는 것은 꽤 깁니다. 이런 댓글에서는 더욱 그러하며, 또 댓글이라 하더라도 왠지 테스트는 해서 확실히 해두어야할 듯 하고 뭐 그렇죠.

      직접 plot을 그려보면서 해보셔도 충분할 겁니다.^^

      한가지 팁을 드리면 MATLAB은 matlabcentral이라고하는 멋진 사이트를 운영하고 있답니다. 거기서

      how to insert noise in sin function이라고 검색한 결과

      http://www.mathworks.co.kr/matlabcentral/answers/86901-how-to-insert-noise-in-a-sine-function

      라는 글이 나타났으며, 그로부터

      http://www.mathworks.co.kr/kr/help/comm/ref/awgn.html

      라는 글을 알게되었고

      awgn이라는 신호에 가우스 노이즈를 실어주는 함수도 있다는 군요...

      이런 함수를 어떻게 일일이 다 알겠습니까^^ 검색하는 능력이 요즘은 더 요구되는 시절인가 봅니다.^^

      좋은 성과 있으시길 바랍니다.^^