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

[Matlab / 매트랩] 4. 2차원 그래프 적용편

by freezkim 2010. 2. 3.


[Matlab / 매트랩] 강의 4번째

 4. 2차원 그래프 그리기 적용편 (2D advanced graph) 흠 고급편이라고 해야 하나... 

흐으
씁쓸합니다.
매우 오랜만에 쓰는 거라 왠지 죄책감마져 느껴지는군요..  
역시 이럴땐 남자의 눈물로 호소를!!

후우 죄송합니다ㅠㅠㅠㅠ 흑 

저번 강의에 매트랩 그래프에 대한 내용을 올린뒤로 갑자기 블로그 방문자수가 미친듯이 늘었어요.
갑자기 책임감이 느껴집니다ㅠㅠ 네이버에서 매트랩강의라고 치면 제 블로그가 가장 위에 떠버리는 사태는 뭐랄까..  

 

네..=_= 잡소리는 그만하고 이제 본론에 들어가보도록 합시다. 

저번시간에 이어 오늘 할 것은 2차원 그래프 그리기의 응용편 입니다. 

2차원 그래프 그리기에서 부족했던 부분을 두세가지쯤 다뤄서 끝낸 다음에 

깔끔하게 다음 강의에서 3차원 그래프를 그려보려고 해요. 

자 그럼 시작합니다. 

 @@@  2차원 그래프 그리기 응용편  @@@ 두두두두둥둥둥

 2차원 그래프를 그리는 것은 어느정도 따라하셨으리라 생각해요.

 하지만 구간에 따라서 함수를 다르게 나타내고 싶다던지

 한 그래프에 여러 그래프를 동시에 나타내고 싶다던지,

 그래프 두개를 비교해보고 싶다던지 하는 경우가 무척 많이 있겠죠????? 없으시면 넘어가셔도 되요. 도시 남자는 연연하지 않습니다. 

후후 이런 경우를 모조리 싸그리 다 표현해주기 위해서 몇개의 명령어가 필요할까요???? 

후후훟후후후후ㅜ후후후 딱 3개면 됩니다. 아주 깜짝 놀라셨죠 후후후후 아침 점심 저녁 3개만 외우면 넌 그래프 그릴수 있어 

그 3개는 바로  hold on , subplot, figure 라는 명령어입니다. 

차례차례 설명과 예시를 들어보도록 할게요ㅎ 

1) figure  

사실 hold on을 먼저 하려고 했는데 요게 밑바탕이 되어야 할것 같아서.... 

figure라는 명령어는 그래프가 그려지는 창을 의미합니다. 무슨뜻인지 잘 모르시겠죠? 한번 매트랩 화면을 볼께요. 

>> x=[1 2 3];
>> y=[2 4 6];
>
> plot(x,y)


figure가 보이시나요??? 잘 안보이신다구요?? 

 이제 잘 보이시나요??ㅎㅎ

 그래프를 그리게 되면 기본적으로 figure 1이라는 창에 그려지게 됩니다.

 근데, 여기서 plot 명령어를 쓰면 어떻게 될까요??

 당연이 figure 1이라는 창에 그래프가 그려저서 기존에 있던 그래프가 사라지게 됩니다.

 그럼 안 사라지게 하고 싶다면? 새 창을 하나 더 만들어서 그래프를 그리면 되겠죠. 근데 어떻게 해야 할까요???

 요기서 나오는게 바로 figure 명령어 입니다.

 사용법은 쉬워요 figure(숫자) 를 입력해주시면 'figure 숫자' 의 이름을 가진 새 창이 뜹니다.

 아 숫자에는 1이상의 정수를 넣어주셔야 되요. 그렇다고 너무 큰 숫자(100억이라던지)를 넣어주시면 안되요!! 어이 거기 '숫자' 라고 치는 사람은 없겠지? 

한번 명령어를 입력해보겠습니다. 

>> figure(2)

요런 창이 뜨시는걸 확인하실 수 있을 거에요. 

제목이 figure 2 라고 적힌걸 보실 수 있죠? 

이 명령어 figure(2)에는 두가지 기능이 있는데요. 

하나는 제목이 figure 2라는 창이 없다면 figure 2를 만드는 기능이고 

또 하나는 figure 2라는 창을 사용하겠다 라는 기능입니다. 

간단한 문제를 예로 들어 볼게요. 

>> figure(1)
>> figure(2)
>> figure(3) 

자 요렇게 순서대로 입력하면 figure 1 / figure 2 / figure 3 이라는 이름을 가진 창 3개가 만들어 집니다. 

그다음에  

>> x=[1 2 3];
>> y=[2 4 6];
>> plot(x,y) 

를 입력하면 그래프가 그려지겠죠? 

근데 몇번 창에 그래프가 그려질까요??? 1 , 2, 3 중에서?? 

힌트::: 앗앗앗 산삼이다 산삼이다 산삼이다 !!! 

 후후 눈치빠르신 분들은 알아채셨겠지만 figure(3)에 그래프가 그려지게 되요.

 왜인지 아시겠나요? 입력한 명령어가 figure(1)->figure(2)->fugure(3) 순서였기 때문에,

 1번 쓰겠다에서 2번 쓰겠다로, 2번 쓰겠다에서 3번 쓰겠다로 명령어가 입력이 된거죠.

 즉 최종적으로는 figure 3을 쓰겠다는 의미가 되는 거죠.

 그럼 당연히 그래프는 figure 3번 창에 그려지게 되는 것이죠.

 이해가 가시나요?

 요 figure 그래프를 적절히 이용해 주시면 원하는 그래프를 언제든지 다른 창에 새롭게 그려주실 수 있게 되는거죠. 

여기다가 그래프 옵션을 적용시켜주고 싶으시다면 

원하는 창을 선택하신후, 옵션을 적용하면 됩니다. 

아!! 그리고 숫자를 입력하지 않으시면요 (figure() 라고 치시면) 새로운 figure 창이 뜨게 됩니다. 숫자는 1번부터 차례대로 붙습니다. 즉, 기존에 figure 1, 2 , 3 의 3개 창이 있었다면 figure()를 치시면 figure 4라는 새 창이 뜨게 되는 거에요. 

마지막으로 예를 하나 보여드리고 figure 명령어는 넘어가도록 하겠습니다. 

예)) y=2x의 그래프를 창 3개에 똑같이 그리되, 2번 창에는 grid on 을 해라. 

>> figure(1)
>> figure(2)
>> figure(3)
>> x=[-10:0.01:10];
>> y=2.*x;
>> figure(1)
>> plot(x,y)
>> figure(2)
>> plot(x,y)
>> grid on
>> figure(3)
>> plot(x,y) 

결과는 다음과 같습니다. 

2) hold on

매우 강력한 명령어 입니다. 꼭 외워 두셔야 해요. 요건
 

아침 점심 저녁 3번씩 홀드 언을 외치면 매트랩의 고수가 될것이야. Right now 

요 hold on은 뭐하는 명령어인지 감이 오시나요 혹시?? 잡아두셔라 뭐 이런의미겠죠. 

후후 일단 기존에 그래프를 그리고 다시 plot을 치게 되면 

없어요. 죽죠 원래 그래프 죽어버리죠.  

근데 이 그래프를 안 죽이고, 걍 냅두고 위에 다른 그래프를 그리고 싶은 거에요!!! 

그럴때 사용해 주는 함수가 바로 요 hold on 입니다. 

, 원래 그래프가 그려져 있는 채로, 새로운 그래프를 겹쳐 그릴 때 hold on을 사용합니다. 

뭐 바로 예를 들어 보이겠습니다. 

예1) y=2*x, y=4*x를 파란색, 빨간색 그래프로 나타내보아라.

예2) x가 1~5일 때는 y=60*cos(x), x가 5~10일 때는 y=x^2 + 3*x 로 나타내어라. 

예1)
>> x=[-10:0.01:10];
>> y1=2.*x;
>> y2=4.*x;
>> plot(x,y1)
>> hold on
>> plot(x,y2, 'r')

데이터를 다르게 표시하기 위해 y로 이름을 두지 않고, y1, y2로 데이터 벡터 이름을 정했습니다.

여기다가 범례표시(??) 를 한번 해볼께요.
legend('이름', '이름') 을 하시면 그린 순서대로(파란줄, 빨간줄) 이름이 표시됩니다.

>> legend('y=2*x','y=4.*x') 

깔삼하죠? hold on의 위력을 아시겠나요 후후

예2) 이거는 범위에 따라 함수가 다르게 주어졌을 때, hold on을 가지고 하나의 함수로 그릴 수 있는 것을 보여주는 예제입니다.

>> x1=[1:0.01:5];
>> y1=60.*cos(x1);
>> x2=[5:0.01:10];
>> y2= x2.^2 + 3.*x2;
>> plot(x1,y1)
>> hold on
>> plot(x2,y2)

(x1,y1), (x2,y2) 라는 이름으로 벡터를 만들어 줘서, 그래프 두개를 한 창에 나타내었습니다. 

 쉬우면서도 유용한 명령어죠??? 안쉽나... ㅠㅠㅠㅠㅠㅠ

 3) subplot 

subplot 이라는 명령어는 한 창에 여러개의 그래프를 나타내고 싶을 때 쓰는 함수 입니다. 

흐흐 hold on이랑 뭐가 다르나면요, 여러개의 그래프를 한 창에 나타내기는 하는데 같이는 안나타내는거죠 후후 

뭔말인지 모르겠죠? ㅋ 그냥 예를 들어 봤어요 한번 보세요 ㅎ 

>> subplot(1,2,1)
>> x=[-10:0.01:10];
>> y1=2.*x;
>> plot(x,y1)
>> axis([-10 10 -50 50])
>> subplot(1,2,2)
>> y2=4.*x;
>> plot(x,y2)
>> axis([-10 10 -50 50]) 

 이런 식인거죠. 같은 창에 두 그래프를 나타내기.

기능은 figure과 동일합니다!! 만들기! 의 기능과 선택!의 기능입니다. 다만 사용법은 조금 틀린데요. 

subplot(m, n , i )  라고 입력하시면 

m by n 크기의 행렬로 그래프가 들어갈 자리를 만들때 

i 번째 자리의 그래프를 만들고 선택한다. 라는 뜻입니다. 

예를 들어 subplot(3,4,1) 이라면 

3 by 4 크기의 행렬 형태로 그래프가 들어갈 자리를 확보 한 후, 첫번째 자리에 그래프 axis를 해주는 거에요. 이런식이죠. 

 

이때 이 첫번째, 두번째의 의미는 왼쪽 제일 위에서부터 오른쪽으로 차례대로 1,2,3,4, 식으로 번호가 증가합니다. 

예를들어 (2,3)의 위치라면 7번이 되는 셈이지요.  

>> subplot(3,4,1)
>> subplot(3,4,7) 

 어느 정도 감이 오셨을 거라 믿어요.

위의 그래프에 y=2.*x, y=4.*x 를 각각 그려 보실래요??
figure의 사용법과 같습니다.
위에 제가 그렸던 코드를 참조하셔도 쉽게 따라하실 수 있을 거에요.  

그럼 이것으로 2차원 그래프 적용편을 마치겠습니다. 

 
마칠려다가 왠지 오랜만인데 아쉽기도 하고 또 알아두면 매우 유용한 그래프 그리기 방법이 있어서 하나만 더하도록 할게요. 

바로 ezplot 이라는 명령언데요. 

말그래도 쉽게 그려주는 그래프입니다. 흐흐흐흑ㅠ 

이전에는 함수 그릴때 데이터 형식으로 벡터 두개를 만들어서 plot(x,y)로 했잖아요? 

근데 요건, 함수 식을 넣어주면 매트랩 지가 알아서 걍 막 그려줍니다. 흐허허허허허 

예를 들어 이런 경우 있잖아요.  

y^4+y=x^2+x 

이런거 어케 그리겠어요 벡터로 어케 나타내 이궈 ㅠㅠㅠㅠㅠㅠㅠㅠㅠ 좌표변환 해야 되나 우워우어워워 

이렇게 턱 막혀버릴때 

바로 ezplot이라는 멋져버린 함수를 써줄 수 있는거죠. 

사용법은 다음과 같습니다. 

ezplot('함수식', [그래프 범위(x최소 x최대 y최소 y 최대)]) 

예를 들어볼게요. y^4+y = x 라는 그래프를 x범위 -10~10 y 범위 -10~10 으로 그래프를 그리겠습니다. 

>> ezplot('y^4+y=x',[-10 10 -10 10])  

 아주 멋져버리죠잉

여기도 마찬가지로 grid on이라던지, xlabel, ylabel과 같은 옵션 지정 명령어들이 먹혀줍니다.
필요하실 때 사용하시면 될듯해요. 

그럼 다음 강의는 빠른 시일내로!!!ㅠㅠㅠ 아름다운 3차원 그래프와, 도형 그리기를 올리도록 하겠습니다.ㅠㅠㅠㅠㅠㅠㅠㅠㅠ

잘 부탁 드려요







Tip!!!
메뉴줄에서 help -> matlab help 를 누르신후 search 탭을 누르면
원하시는 명령어를 쉽게 찾으실 수 있습니다. 물론 설명도 매우 잘 나와 있습니다.