MATLAB 을 사용하여 알고리즘을 개발하고 분석하면서 MATLAB 의 다양한 그래프 기능을 사용하실 것이라고 생각합니다. 10 년도 전에 MATLAB 을 학부 시절에 접하고, MATLAB 의 그래프 기능들이 정말 유용하다는 생각을 했던 기억이 있습니다.

오늘은 MATLAB 을 사용하여 그래프의 영역을 나타내는 방법에 대해서 조금 소개를 하려 합니다.

예를 들어 아래 두 그래프로 둘러싸인 영역을 표시하고 싶을 때 MATLAB으로 어떻게 표현해야 되는지에 대해서 소개를 하려 합니다.

y = x+3

y = 2*x-6

위 두개의 그래프로 둘러싸인 영역을 표시하는 간단한 코드는 아래와 같습니다. 아래 코드에서 설명할 부분은 x_, y_ 를 설정하는 부분과 fill() 이라는 함수에 대한 부분이 될 거 같은데~ fill 함수는 이름에서도 알 수 있듯이 다각형 내부의 색을 채워주는 함수입니다. fill 함수가 다각형의 좌표값을 필요로 하다 보니 x_, y_ 값을 아래와 같이 표현해서 닫힌 형태의 다각형으로 만들어 준 것이고 마지막 인자인 ‘r’ 은 red 즉 빨간색으로 표시하라는 뜻입니다.

x=linspace(-10,30,1001);

y1 = x+3;

y2 = 2*x-6;

x_=[x fliplr(x)];

y_= [y1 fliplr(y2)];

figure

fill(x_, y_, 'r')

grid on

그래프는 아래와 같이 표현됩니다.

fill 함수와 유사한 함수로 patch 함수가 있고~ patch 함수는 하나 이상의 채워진 다각형을 만들어 주는 함수입니다. 다각형 한개를 그릴때는 사실 동일하다고 볼 수도 있을 것 같네요. 위 코드에서 fill 을 patch 로 바꿔도 동일한 결과를 얻을 수 있습니다.

fill, patch 함수가 다각형 내부의 색을 채워주는 함수이다 보니 x_, y_ 와 같은 변수들을 만들어서 사용했는데~ 조금 더 쉽게 영역을 표시하는 함수로 area 함수를 사용할 수가 있습니다. 아래 메뉴얼에도 나와 있지만 2차원 그래프에서 그래프 선과 basevalue 로 둘러싸인 부분의 영역을 표시해주는 함수입니다. basevalue 의 디폴트 값은 0 입니다.

https://kr.mathworks.com/help/matlab/ref/area.html?searchHighlight=area&s_tid=doc_srchtitle

area 함수를 사용한 코드는 아래와 같습니다.

x=linspace(-10,30,1001);

y1 = x+3;

y2 = 2*x-6;

x=x(:);

y=[y1(:) y2(:)];

figure

h = area(x, y);

grid on

코드를 표현하는 것은 조금 더 쉬운 듯한데…. 그래프를 확인해 보면 의도와는 뭔가 조금 다른 것 같습니다. 즉 원하지 않는 파란색 영역도 나타낸 것을 확인할 수 있습니다.

파란색 영역을 없애기 위해서 조금 더 코드를 추가해야 될 것입니다. 파란색 영역을 투명하게 만들기 위해서 해당 부분의 색깔을 흰색으로 만들어 준 후에~ alpha 함수를 사용하여 투명도를 조절해 줬습니다~

h(2).FaceColor = [1 0 0];

h(1).FaceColor = [1 1 1];

alpha(h(1),0.1)

이렇게 해서 나타나는 그래프를 보면~ 아래와 같이 원하는 영역만 표시된 그래프를 얻을 수가 있습니다~



오늘은 MATLAB 기본 함수들에 대해 설명하려 한다.

너무 많은 함수들이 있어서 다 설명하기는 힘들고 생각날 때 마다 본 페이지에 추가 하는 방식으로 설명하는 것이 좋을 것 같다.

 

아래와 같은 매트릭스를 예를 들어 보자.

x=magic(4) % 4행 4열의 마 방진 매트릭스 행 또는 열의 모든 합이 같은 매트릭스를 만들어 준다.

x =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

 

flipud() 함수는 위 아래를 변경 할 때 이용한다. 즉 행의 순서를 바꿀 때 사용한다.

x2=flipud(x)

x2 =

4 14 15 1

9 7 6 12

5 11 10 8

16 2 3 13

 

fliplr() 함수는 좌 우를 변경 할 때 이용한다. 즉 열의 순서를 바꿀 때 사용한다.

x3=fliplr(x)

x3 =

13 3 2 16

8 10 11 5

12 6 7 9

1 15 14 4

 

4행 4열의 매트릭스 x 를 2행 8열로 만들어 보자. 다음과 같이 reshape() 함수를 이용하면 간단히 매트릭스의 행 열을 변환 할 수 있다.

x4= reshape(x, 2, 8)

x4 =

16 9 2 7 3 6 13 12

5 4 11 14 10 15 8 1

 

x4 매트릭스를 하나의 벡터로 표현해 보자.

x4(:)

ans =

16

5

9

4

2

11

7

14

3

10

6

15

13

8

12

1

MATLAB 의 기본 계산은 항상 열을 기준으로 표현된다는 것을 명심해야 한다.

 

반복되는 매트릭스를 만들어 보자.

예를 들면 x 라는 매트릭스를 2행 3열 만큼 만들어 보자.

x5=repmat(x, 2, 3)

x5 =

16 2 3 13 16 2 3 13 16 2 3 13

5 11 10 8 5 11 10 8 5 11 10 8

9 7 6 12 9 7 6 12 9 7 6 12

4 14 15 1 4 14 15 1 4 14 15 1

16 2 3 13 16 2 3 13 16 2 3 13

5 11 10 8 5 11 10 8 5 11 10 8

9 7 6 12 9 7 6 12 9 7 6 12

4 14 15 1 4 14 15 1 4 14 15 1

 

위의 x5 매트릭스의 총 사이즈를 알아 보자.

 

size(x5)

ans =

8 12

 

4행 4열의 매트릭스 x 를 2행 3열로 만들었으므로 위 결과와 같이 8행 12열이 나옴을 알 수 있다.

다음으로 x5의 length()를 확인 해 보자.

length(x5)

ans =

12

 

length() 함수는 size() 의 값 중 큰 값을 리턴 해 준다. size() 값이 8 행 12열 이니까 그 중 큰 값인 12를 반환 주는 것이다.

 

이제 x5 매트릭스의 총 인자의 수를 알아 보자.

numel(x5)

ans =

96

 

size(x5) 값이 8행 12열 이므로 총 인자의 수는 96 이라는 것을 알 수 있다.


+ Recent posts