Matlab/2차원 그래프 문서 원본 보기
←
Matlab/2차원 그래프
둘러보기로 이동
검색으로 이동
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
{{상태상자|진행중|대학 강의|공학|강의형}} 가장 먼저 '2차원 선 그래프'를 그려봅시다. 방식에 따라 크게 두 가지로 나누고 가겠습니다. :plot(x, y, '선 모양, 마커, 색') :fplot('식', [x0, x_end], '선 모양, 마커, 색') plot은 값을 미리 데이터로 만들어서 그리고, fplot은 식을 통해서 그려주는 선 그래프라고 생각하면 되겠습니다. == plot(x, y) == 그래프를 그릴 때 가장 빈번하게 사용하는 첫번째 방법은 plot함수를 이용하는 것입니다. plot 함수에 들어가는 변수들을 의미대로 적어보면 다음과 같습니다. :plot( X Data, Y Data, 'Line Specifiers', 'Property Name', Property Value) x나 y 부분에 들어가는 것은 그래프를 그릴 때 나타낼 값의 범위를 지정하는 것으로, 벡터가 들어갑니다. x, y 이후에 그래프 그리기 옵션 값을 비워두어도 되는데, 이렇게 하면 기본값으로 출력됩니다. 즉 반드시 지정할 필요는 없습니다. 예를 들어, 기본 옵션으로 y=x<sup>2</sup>을 그린다면 다음과 같이 하면 됩니다. <source lang="octave"> >> 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) </source> [[파일:GNU Octave plot.png|450px]]<br> 그래프를 자세히 보면 곡선이 부드럽지 않은 것을 볼 수 있는데, 부드럽게 해주려면 x값을 여러 값으로 해주면 됩니다. <source lang="octave"> >> x=linspace(-5,5); y=x.^2; plot(x,y) </source> 앞서 배웠듯이, linspace에서 세번째 변수인, '원소 개수'를 지정해주지 않으면, 자동으로 100개의 원소로 만들어주기 때문에 x 벡터는 100개의 값을, x 벡터값을 이용해 만든 y 벡터 역시 100개의 값을 가지고 있습니다. 이정도면 충분히 부드러운 곡선이 만들어 지겠죠. 주의할 점은, 그래프를 다시 그릴 때 x 벡터만 다시 만들어주면 안 된다는 것입니다. y벡터도 다시 입력해주지 않으면, 위에서 만들었던 열한 개의 원소가 들어있는 y 벡터가 사용되기 때문에 에러가 발생합니다. (x벡터는 새로 100개의 원소로 만들어 줬으나, y 벡터는 기존의 11개 원소를 재사용하여 에러 발생) [[파일:GNU Octave smooth plot.png|450px|left]] {{-}} === 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각별) [[파일:Octave plot color.png|왼쪽|섬네일|500px|파선, 점 모양 원, 색상 red를 적용한 모습]] {{-}} ==== 'Property Name', Property Value ==== 작은 따옴표에 들어가는 문자는 소문자로 해도 상관 없습니다. {| class="wikitable" |- ! 'Property Name' !! Property Value !!설명 |- | 'LineWidth' ||point 단위(기본값 0.5) || 선 폭 지정 |- | 'MarkerSize' ||point 단위 || 점 표시 크기 지정 |- | 'MarkerEdgeColor' || line specifiers에서 사용했던 색상 문자(작은 따옴표에 넣어야함) || 점 표시 테두리 색 지정 |- | 'MarkerFaceColor' ||line specifiers에서 사용했던 색상 문자(작은 따옴표에 넣어야함) || 점 표시 배경색 지정 |} 예시) 위에서 사용했던 그래프를 바꿔봅시다. <source lang="octave"> >> x=-5:1:5; y=x.^2; plot(x,y, '--ro', 'linewidth', 3, 'markersize', 3, 'markeredgecolor', 'c', 'markerfacecolor', 'r') </source> [[파일:GNU Octave plot option.png]] {{-}} === 하나의 그림에 여러 그래프 넣기 === ==== plot에 여러 변수 넣어서 한번에 그리기 ==== 하나의 그림에 plot으로 여러 그래프를 넣으려면 다음과 같이 해줍니다. plot(x1, y1, x2, y2, x3, y3) 즉 각각의 함수의 정의역과 치역을 순서대로 나열해주면 됩니다. 예를 들어 <math>Q = \sqrt{2\times 9.81 (5- y)\times y^2}</math>의 그래프를 그리고, <math>x = Q_{max}</math>, y=3.3의 두 직선을 추가해봅시다. x축에 Q, y축에 y를 넣는 그래프입니다. Q의 범위는 0에서 5까지 100개의 원소로, y의 범위는 Q에 해당하는 100개 원소로 그려봅시다. <source lang="octave"> >> 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)) </source> [[파일:GNU Octave 여러 함수 한번에 그리기.png]] 같은 정의역에 대해서 여러 그래프를 그리는 경우, 위와 같은 방법으로 일일이 나열해주어야 합니다. 즉 다음과 같은 방법으로는 그래프를 그릴 수 없습니다. <source lang="octave"> >> 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 </source> 옳은 방법은 다음과 같습니다.<ref>GNU Octave의 Command Window에서 help plot을 쳐서 나오는 도움말을 참고함</ref> <source lang="octave"> >> x=0:10; y1=x; y2=2*x; y3=3*x; plot(x, y1, x, y2, x, y3) </source> [[파일:GNU Octave 여러 그래프 한번에 그리기.png]] ==== hold on을 이용해 한개씩 추가하기 ==== plot으로 하나의 그래프를 그리고나서 hold on 명령어를 쓴 다음 다시 plot으로 그래프를 그리면 기존 그림에 그래프를 하나씩 추가할 수 있습니다. ; 응용 예제 [[w:평균압밀도|평균압밀도]] <math>\bar U</math>와 [[w:시간계수|시간계수]] T<sub>v</sub>의 관계곡선을 그려봅니다. 입력해야할 값은 다음과 같습니다. {| class="wikitable" |- ! rowspan="2" | <math>\bar U</math> !! colspan="3" | T<sub>v</sub> |- | 양면 배수 조건 || 일면 배수 조건(하단 배수) || 일면 배수 조건(상단 배수) |- | 0.1 || 0.008 || 0.047 || 0.003 |- | 0.2 || 0.031 || 0.100 || 0.009 |- | 0.3 || 0.071 || 0.158 || 0.024 |- | 0.4 || 0.126 || 0.221 || 0.048 |- | 0.5 || 0.197 || 0.294 || 0.092 |- | 0.6 || 0.287 || 0.383 || 0.160 |- | 0.7 || 0.403 || 0.500 || 0.271 |- | 0.8 || 0.567 || 0.665 || 0.440 |- | 0.9 || 0.848 || 0.940 || 0.720 |} 먼저 값을 입력합니다. <source lang="octave"> >> U=[0.1:0.1:0.9]; >> Tv1=[0.008 0.031 0.071 0.126 0.197 0.287 0.403 0.567 0.848]; >> Tv2=[0.047 0.100 0.158 0.221 0.294 0.383 0.500 0.665 0.940]; >> Tv3=[0.003 0.009 0.024 0.048 0.092 0.160 0.271 0.440 0.720]; </source> 그리고 plot으로 첫번째 그래프를 그립니다. <source lang="octave"> >> plot(U,Tv1) </source> [[File:U-Tv1.png]] 그 다음 그래프를 그리기 위해 hold on을 하고 이어서 plot합니다. <source lang="octave"> >> hold on >> plot(U,Tv2) >> plot(U,Tv3) </source> 그러면 세 개의 그래프가 동시에 그려집니다. [[File:U-Tv.png]] === 축 제목 설정 === xlabel('문자열'), ylabel('문자열')을 이용해 축의 제목을 넣어줄 수 있습니다. 바로 위에서 한 <math>Q = \sqrt{2\times 9.81 (5- y)\times y^2}</math>의 그래프에서 x축에 Q, y축에 y라고 써봅시다. <source lang="octave"> >> xlabel('Q'), ylabel('y') </source> 라고 쳐주면 됩니다. 축 제목 글자 크기를 키우려면 'fontsize', xx 를 괄호 안에 추가해주면 됩니다. xx에 원하는 폰트사이즈를 입력합니다. 기본 크기는 10입니다. 예를 들어 축 제목 글자 크기를 16폰트로 하고 싶으면 다음과 같이 입력합니다.<ref>http://psahnwoo.blog.me/110150821905</ref> <source lang="octave"> >> xlabel('Q', 'fontsize', 16), ylabel('y', 'fontsize', 16) </source> === 그래프에 문자 넣기 === text(x, y, '문자열') 명령어를 이용해 원하는 (x, y) 점에 해당하는 위치에 문자열을 넣을 수 있습니다. 예를 들어 y=x의 그래프를 그리고, y축의 (0, 4) 점에 'y-axis'라는 문자열을 넣어봅시다. <source lang="octave"> >> x=linspace(0,10); y=x; plot(x,y), text(0,4,'y-axis') </source> [[파일:GNU Octave plot text.png]] ; 응용 예제 위에서 그린 <math>Q = \sqrt{2\times 9.81 (5- y)\times y^2}</math>의 그래프에서 x축에 Q, y축에 y라고 쓰고, Q의 범위는 0에서 5까지 100개의 원소로, y의 범위는 Q에 해당하는 100개 원소로 그려봅시다. <math>x = Q_{max}</math>, 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라고 써서 그래프를 완성해봅시다. <source lang="octave"> >> 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') </source> [[File:Q-y Diagram.png|left]] {{-}} == semilogx == semilogx(x, y)를 사용하면 가로축이 log x인 그래프를 그릴 수 있습니다. ; 예제 다음 값을 이용해 가로축이 log p, 세로축이 er인 그래프를 그려라. 단, *로 값을 표시하고 실선으로 그린다. {| class="wikitable" |- ! p !! er |- | 0 || 0.71880 |- | 0.05 || 0.71055 |- | 0.1 || 0.69474 |- | 0.2 || 0.67136 |- | 0.4 || 0.64249 |- | 0.8 || 0.59780 |- | 1.6 || 0.52974 |- | 3.2 || 0.45411 |} ; 풀이 <source lang="octave"> >> p=[0;0.05;0.1;0.2;0.4;0.8;1.6;3.2]; >> er=[0.71880;0.71055;0.69474;0.67136;0.64249;0.59780;0.52974;0.45411]; >> semilogx(p, er, '*-') </source> [[파일:압력 공극비 그래프.PNG]] ; 연습문제 [[w:토질역학|토질역학]]에서 [[w:압밀|압밀]] 실험 결과를 나타내는 [[w:공극비|공극비]]-압력 곡선을 그리기 위해 다음과 같은 계산을 해야한다. Matlab 또는 GNU Octave를 이용하여 그래프를 그려라. (<math>H_v = H - H_s</math>) {| class="wikitable" |- ! 압력 p (kgf/cm<sup>2</sup>) !! 압밀 완료 시료 최종 높이 H(cm) !! H<sub>s</sub> !! H<sub>v</sub> !! <math>e = \frac{H_v}{H_s}</math> |- | 0 || 2.500 || 1.4545 || || |- | 0.05 || 2.488 || 1.4545 || || |- | 0.1 || 2.465 || 1.4545 || || |- | 0.2 || 2.431 || 1.4545 || || |- | 0.4 || 2.389 || 1.4545 || || |- | 0.8 || 2.324 || 1.4545 || || |- | 1.6 || 2.225 || 1.4545 || || |- | 3.2 || 2.115 || 1.4545 || || |} ; 풀이 <source lang="octave"> >> H=[2.5;2.488;2.465;2.431;2.389;2.324;2.225;2.115]; >> Hv=H-1.4545; >> Hv/1.4545 ans = 0.71880 0.71055 0.69474 0.67136 0.64249 0.59780 0.52974 0.45411 >> e_ratio=ans; </source> 여기까지 하면 표가 완성된다. {| class="wikitable" |- ! 압력 p (kgf/cm<sup>2</sup>) !! 압밀 완료 시료 최종 높이 H(cm) !! H<sub>s</sub> !! H<sub>v</sub> !! <math>e = \frac{H_v}{H_s}</math> |- | 0 || 2.500 || 1.4545 || 1.04550 || 0.71880 |- | 0.05 || 2.488 || 1.4545 || 1.03350 || 0.71055 |- | 0.1 || 2.465 || 1.4545 || 1.01050 || 0.69474 |- | 0.2 || 2.431 || 1.4545 || 0.97650 || 0.67136 |- | 0.4 || 2.389 || 1.4545 || 0.93450 || 0.64249 |- | 0.8 || 2.324 || 1.4545 || 0.86950 || 0.59780 |- | 1.6 || 2.225 || 1.4545 || 0.77050 || 0.52974 |- | 3.2 || 2.115 || 1.4545 || 0.66050 || 0.45411 |} 아직 입력하지 않은 p값을 주고 그래프를 그린다. <source lang="octave"> >> p=[0;0.05;0.1;0.2;0.4;0.8;1.6;3.2]; >> semilogx(p, e_ratio, '*-') </source> [[파일:압력 공극비 그래프.PNG]] == fplot == fplot으로도 함수의 그래프를 그릴 수 있습니다. fplot('function', limits, 'line specifiers') 'function'에는 함수를 넣으면 되는데, 여기선 plot과 다르게 원소별 연산(./ 등)을 할 필요 없이 그냥 수식을 적어주면 됩니다. limits는 []괄호를 이용해 x의 최솟값과 최댓값 두 개의 원소로만 벡터로 범위를 넣어주면 됩니다. 'line specifiers'는 plot과 동일합니다. 예시) <source lang="octave"> >> fplot('x^2',[-5, 5], '-*k') </source> [[파일:GNU Octave fplot.png]] {{-}} == 레이블 == x축 이름, y축 이름, 그래프 제목 등을 입력해줄 수도 있습니다. 이 부분은 설명보다 예시를 보이는 게 더 나을 것 같네요. <source lang="octave"> >> fplot('x^2',[-5, 5], '-*k') >> xlabel('x'), ylabel('y'), title('Parabola') </source> [[파일:GNU Octave labels.png]] {{-}} == 각주 == <references/> == 참고 자료 == * 충북대학교 수치해석 강의 * [https://m.blog.naver.com/PostView.nhn?blogId=kimhanbyol&logNo=170207580&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F MATLAB log scale 그래프 그리기(자원환경공학과의 별 블로그)]
이 문서에서 사용한 틀:
틀:-
(
원본 보기
)
틀:상태상자
(
원본 보기
)
Matlab/2차원 그래프
문서로 돌아갑니다.
둘러보기 메뉴
개인 도구
로그인
이름공간
문서
토론
한국어
보기
읽기
원본 보기
역사 보기
더 보기
검색
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
특수 문서 목록
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보