본문으로 바로가기

본 강좌에 사용되는 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를 선택하고

붙여넣기를 하면

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

MATLAB 02. 기초 연산 법 및 그래픽 출력 01.pdf


댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 임초보 2011.01.19 19:11 신고

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

    • BlogIcon 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를 읽어 올 수 있나요?<-넘 바보 같은 질문같아요. 엉엉엉 해결 못본채로 끙...혼자 공부가 넘 버거워요.

    • BlogIcon PinkWink 2011.01.22 21:35 신고

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

  3. BlogIcon wow21star 2011.02.16 13:05 신고

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

  4. pigret 2011.02.24 23:03 신고

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

  5. 정인 2011.03.05 04:05 신고

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

    • BlogIcon PinkWink 2011.03.07 08:47 신고

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

  6. ㅇㅊ 2011.03.18 11:41 신고

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

    • BlogIcon PinkWink 2011.03.18 11:50 신고

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

  7. 메틀랩 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)
    이걸로 그래프를 그리고싶은데 그래프를 못그리겠어요 ㅠ
    방법좀 알려주시면 안될까요?

    • BlogIcon PinkWink 2011.03.28 09:56 신고

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

  8. 2011.03.30 11:07

    비밀댓글입니다

  9. mahasports 2011.04.04 23:12 신고

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

  10. 열심군 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

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

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

    • BlogIcon PinkWink 2011.04.14 09:59 신고

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

    • 열심군 2011.04.14 21:03 신고

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

    • BlogIcon PinkWink 2011.04.15 17:33 신고

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

  11. 열심 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 하는것인데, 힘드네요

    • BlogIcon PinkWink 2011.05.25 18:46 신고

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

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

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

  12. 황진철 2011.07.22 15:28 신고

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

  13. 감사합니다 2012.01.10 22:12 신고

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

  14. 오늘 처음 시작 2012.02.01 00:56 신고

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

  15. 임택규 2012.07.30 17:37 신고

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

    • BlogIcon PinkWink 2012.07.31 11:40 신고

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

  16. 이강현 2012.09.11 13:05 신고

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

  17. 김용태 2012.09.21 18:03 신고

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

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

    • BlogIcon PinkWink 2012.09.24 09:04 신고

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

  18. 규난 2012.09.26 08:07 신고

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

  19. 감사해요 2012.10.08 00:55 신고

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

  20. 백진우 2013.09.12 19:20 신고

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

    • BlogIcon PinkWink 2013.09.12 20:42 신고

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

  21. MATOS 2014.02.17 15:49 신고

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

    • BlogIcon 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이라는 신호에 가우스 노이즈를 실어주는 함수도 있다는 군요...

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

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