Matlab 그래프

위키배움터
이동: 둘러보기, 검색
자료 정보
Face-blush.svg 진행 상황: 이 자료는 아직까지 만들어지는 중입니다. 여러분이 빨리 진행될 수 있도록 도와주세요.
Sciences humaines.svg 교육 수준: 이 자료는 대학교 강의 수준의 자료입니다.
Crystal exec.png 과목 정보: 이 자료는 공학 과목의 자료입니다.
Nuvola apps edu miscellaneous.svg 자료 형식: 이 자료는 강의형식의 자료입니다.

Matlab에서 그래프를 그리는 방법은 plot 함수를 사용하는 것과, fplot 함수를 사용하는 것이 있습니다.

plot[편집]

그래프를 그릴 때 사용하는 첫번째 방법은 plot함수를 이용하는 것입니다. plot 함수에 들어가는 변수들은 다음과 같습니다.

plot(x, y, 'line specifiers', 'property name', property value)

x나 y 부분에 들어가는 것은 그래프를 그릴 때 나타낼 값의 범위를 지정하는 것으로, 벡터가 들어갑니다. x, y 이후에 그래프 그리기 옵션 값을 비워두어도 되는데, 이렇게 하면 기본값으로 출력됩니다. 즉 반드시 지정할 필요는 없습니다. 예를 들어, 기본 옵션으로 y=x2을 그린다면 다음과 같이 하면 됩니다.

>> x=-5:1:5
x =

  -5  -4  -3  -2  -1   0   1   2   3   4   5

>> y=x.^2
y =

   25   16    9    4    1    0    1    4    9   16   25

>> plot(x,y)

GNU Octave plot.png
그래프를 자세히 보면 곡선이 부드럽지 않은 것을 볼 수 있는데, 부드럽게 해주려면 x값을 여러 값으로 해주면 됩니다.

>> x=linspace(-5,5); y=x.^2; plot(x,y)

앞서 배웠듯이, linspace에서 세번째 변수인, '원소 개수'를 지정해주지 않으면, 자동으로 100개의 원소로 만들어주기 때문에 x 벡터는 100개의 값을, x 벡터값을 이용해 만든 y 벡터 역시 100개의 값을 가지고 있습니다. 이정도면 충분히 부드러운 곡선이 만들어 지겠죠. 주의할 점은, 그래프를 다시 그릴 때 x 벡터만 다시 만들어주면 안 된다는 것입니다. y벡터도 다시 입력해주지 않으면, 위에서 만들었던 열한 개의 원소가 들어있는 y 벡터가 사용되기 때문에 에러가 발생합니다. (x벡터는 새로 100개의 원소로 만들어 줬으나, y 벡터는 기존의 11개 원소를 재사용하여 에러 발생)

GNU Octave smooth plot.png

plot에 사용되는 변수[편집]

plot의 괄호 안에 들어가는 변수들을 나열하면 다음과 같습니다.

plot(x, y, 'line specifiers', 'Property name', Property Value)

x와 y는 굳이 설명하지 않아도 되는 벡터입니다. 그래프를 그릴 때 x값의 범위 및 간격, 그리고 y가 그려지는 그래프의 함수입니다.

'line specifiers'[편집]

'line specifiers'에 들어가는 항목은(반드시 작은 따옴표(' ')로 감싸주어야 합니다) 선의 종류, 선의 색, 그래프 상의 점 모양이 있습니다. 순서에 상관없이, 따옴표 안에만 적어주면 됩니다.

  • 선 종류 : -(실선), --(파선), :(점선), -.(일점 쇄선)
  • 색 : r(red), g(green), b(blue), c(cyan), m(magenta), y(yellow), k(black), w(white)
  • 그래프 상 점 모양 : +(+), o(원), *(*), .(.), x(x), ^(위 삼각형), v(아래 삼각형), <(왼쪽 삼각형), >(오른쪽 삼각형), s(정사각형), d(마름모), p(5각별), h(6각별)
파선, 점 모양 원, 색상 red를 적용한 모습

'Property Name', Property Value[편집]

작은 따옴표에 들어가는 문자는 소문자로 해도 상관 없습니다.

'Property Name' Property Value 설명
'LineWidth' point 단위(기본값 0.5) 선 폭 지정
'MarkerSize' point 단위 점 표시 크기 지정
'MarkerEdgeColor' line specifiers에서 사용했던 색상 문자(작은 따옴표에 넣어야함) 점 표시 테두리 색 지정
'MarkerFaceColor' line specifiers에서 사용했던 색상 문자(작은 따옴표에 넣어야함) 점 표시 배경색 지정

예시) 위에서 사용했던 그래프를 바꿔봅시다.

>> x=-5:1:5; y=x.^2; plot(x,y, '--ro', 'linewidth', 3, 'markersize', 3, 'markeredgecolor', 'c', 'markerfacecolor', 'r')

GNU Octave plot option.png

하나의 그림에 여러 그래프 넣기[편집]

하나의 그림에 plot으로 여러 그래프를 넣으려면 다음과 같이 해줍니다.

plot(x1, y1, x2, y2, x3, y3)

즉 각각의 함수의 정의역과 치역을 순서대로 나열해주면 됩니다. 예를 들어 의 그래프를 그리고, , y=3.3의 두 직선을 추가해봅시다. x축에 Q, y축에 y를 넣는 그래프입니다. Q의 범위는 0에서 5까지 100개의 원소로, y의 범위는 Q에 해당하는 100개 원소로 그려봅시다.

>> y=linspace(0,5); Q=sqrt(2*9.81*(5-y).*y.^2);
>> plot(Q,y, linspace(max(Q), max(Q)), y, Q, linspace(3.3,3.3))

GNU Octave 여러 함수 한번에 그리기.png

같은 정의역에 대해서 여러 그래프를 그리는 경우, 위와 같은 방법으로 일일이 나열해주어야 합니다. 즉 다음과 같은 방법으로는 그래프를 그릴 수 없습니다.

>> x=0:10; y1=x; y2=2*x; y3=3*x; plot(x, [y1, y2, y3])
error: __plt2vv__: vector lengths must match
error: called from
    __plt__>__plt2vv__ at line 489 column 5
    __plt__>__plt2__ at line 248 column 14
    __plt__ at line 113 column 17
    plot at line 223 column 10

옳은 방법은 다음과 같습니다.[1]

>> x=0:10; y1=x; y2=2*x; y3=3*x; plot(x, y1, x, y2, x, y3)

GNU Octave 여러 그래프 한번에 그리기.png

축 제목 설정[편집]

xlabel('문자열'), ylabel('문자열')을 이용해 축의 제목을 넣어줄 수 있습니다. 바로 위에서 한 의 그래프에서 x축에 Q, y축에 y라고 써봅시다.

>> xlabel('Q'), ylabel('y')

라고 쳐주면 됩니다.

그래프에 문자 넣기[편집]

text(x, y, '문자열') 명령어를 이용해 원하는 (x, y) 점에 해당하는 위치에 문자열을 넣을 수 있습니다. 예를 들어 y=x의 그래프를 그리고, y축의 (0, 4) 점에 'y-axis'라는 문자열을 넣어봅시다.

>> x=linspace(0,10); y=x; plot(x,y), text(0,4,'y-axis')

GNU Octave plot text.png

응용 예제

위에서 그린 의 그래프에서 x축에 Q, y축에 y라고 쓰고, Q의 범위는 0에서 5까지 100개의 원소로, y의 범위는 Q에 해당하는 100개 원소로 그려봅시다. , y=3.3의 두 직선을 추가해봅시다. x축 제목은 Q, y축 제목은 y로 하고, (0, 4.8) 위치에 h_e를, (18, 0.2)위치에 Q_{max}를, (0, 3.2)위치에 y_c를 입력해봅시다. 그 다음 (5, 4.3)위치에 subcritical flow라고 쓰고, (5, 3.4)자리에 critical flow를, (5, 2)자리에 supercritical flow라고 써서 그래프를 완성해봅시다.

>> y=linspace(0,5); Q=sqrt(2*9.81*(5-y).*y.^2);
>> plot(Q,y, linspace(max(Q), max(Q)), y, Q, linspace(3.3,3.3))
>> xlabel('Q'), ylabel('y'), text(0,4.8,'h_e'), text(18, 0.2, 'Q_{max}'), text(0,3.2, 'y_c')
>> text(5, 4.3, 'subcritical flow'), text(5, 3.4, 'critical flow'), text(5, 2, 'supercritical flow')
Q-y Diagram.png

fplot[편집]

fplot으로도 함수의 그래프를 그릴 수 있습니다.

fplot('function', limits, 'line specifiers')

'function'에는 함수를 넣으면 되는데, 여기선 plot과 다르게 원소별 연산(./ 등)을 할 필요 없이 그냥 수식을 적어주면 됩니다. limits는 []괄호를 이용해 x의 최솟값과 최댓값 두 개의 원소로만 벡터로 범위를 넣어주면 됩니다. 'line specifiers'는 plot과 동일합니다.

예시)

>> fplot('x^2',[-5, 5], '-*k')

GNU Octave fplot.png

레이블[편집]

x축 이름, y축 이름, 그래프 제목 등을 입력해줄 수도 있습니다. 이 부분은 설명보다 예시를 보이는 게 더 나을 것 같네요.

>> fplot('x^2',[-5, 5], '-*k')
>> xlabel('x'), ylabel('y'), title('Parabola')

GNU Octave labels.png

더 보기[편집]

각주[편집]

  1. GNU Octave의 Command Window에서 help plot을 쳐서 나오는 도움말을 참고함

참고 자료[편집]

  • 충북대 수치해석 강의