반응형
Recent Posts
Recent Comments
Link
관리 메뉴

공머씨의 블로그

내가 공부한 옥타브 2 15.함수의 그래프그리기 본문

내가 공부한 옥타브(매틀랩)/내가 공부한 옥타브 시리즈2 (공업수학1)

내가 공부한 옥타브 2 15.함수의 그래프그리기

공머씨 2020. 3. 27. 10:35
반응형

저번 시간 8번에 m파일 만드는 것 까지 했습니다.

이번 포스팅에서는 함수의 그래프 만드는 방법을 알아보겠습니다.

9. 함수 그려보기

옥타브를 켜면 

꺽쇠 2개 표시가 있고 그 옆에부터 코드를 입력할 수 있습니다.

이걸 command window =명령 창이라고 합니다.

m파일을 만드는 법을 배우기 전까지는 command window에서 계속 작업을 했었는데 

만드는 방법을 알게된후로 부터 m파일을 만들어서 실행시키는 것에 익숙해지는 게 좋을 것입니다.

script란 여러 개의 명령들을 한꺼번에 순차적으로 실행시킬 수 있도록 하나의 파일에 모아둔 것이라고 정의합니다.

다른 말로는 '프로그램'이라고도 합니다.

스크립트 파일을 사용하면 좋은 점은  명령이 한두 줄일 때는 한번 치고 한번 결과를 보는 게 불편함이 없겠지만

많은 양의 코드들 100줄, 1000줄 이상 사용하시면 스크립트 m파일의 필요성을 느낄 것입니다.

 

Command window를 사용한다면 

100줄 정도 쳤다가 앞에서 잘못 치면 처음부터 다시 쳐야 한다는 불편함이 있습니다.

m파일에서는 틀린 명령만 수정한 뒤 다시 실행시키면 됩니다.

 

( 맨뒤에 세미콜론 친 것은 계산은 다했지만 보여주지 말라는 뜻입니다.)

 

 

 

 

 

손으로 파이를 쓸 때는 그리스어로 쓰지만  (π)

옥타브에서는 pi라는 문자를 사용합니다. 그리고 손으로 쓸 때는 곱셈 기호를 생략하기도 하지만 옥타브에서 곱하기를 할 때는 * (곱하기 기호)를 생략하면 안 되는 것을 명심하시기 바랍니다.

 

 

 

plot라는 단어는 다음과 같은 뜻을 가지고 있군요

교수님이 말씀해주신 tip 

프로그램을 짤 때 100줄 200줄 있으면 한꺼번에 짜고 실행시켜보지 말고

10줄 정도 짠 다음 실행시켜보고 디버그 해보는 습관을 들이자.

m파일로 저장해서 실행했습니다. command window의 Current Directory에서 m파일의 저장 경로를 잘 설정한 뒤 

Command window창에 m파일의 파일명을 입력하고 엔터를 누르면 실행됩니다.

또는 Editor창에 톱니바퀴 가운데 노란색 세모 있는 메뉴를 클릭하면 실행됩니다.

Save File and Run이라고 나와있네요.

 

추가로 Editor에서 문법 오류가 났을 때는 

Command Window에서 에러 메시지를 확인할 수 있습니다.

 

3가지 내장 함수-xlabel(), ylabel(), plot()가 있는데 이는 이전 포스팅에서 설명을 했습니니다.

https://haai.tistory.com/32?category=800204

 

내가 공부한 옥타브10-옥타브로 2D그래프 그리기 (7~14)

내공옥 9에서 마지막 Q를 기억하십니까 우리가 수학 시간에는 사인 함수 곱하기 코사인 함수를 이렇게 sin(x) × cos(x) 쓰지만 옥타브에서 입력할 때는 요소별 곱셈 연산자인.* 를 사용해야 합니다. ​ ​..

haai.tistory.com

12번 축 라벨 생성하기 쪽을 살펴보시면 되겠습니다

 

 4,5,6 줄을 새로 입력한 뒤 Save File로고를 클릭해야 기존에 저장했던 m파일에 추가로 저장이  되어 4,5,6번째 줄까지 실행됩니다. 

마지막에 5번째줄을 t(time)로 수정했습니다.

전체 코드와 최종 실행화면입니다.

t=[0:0.01:1];
y=sin(2*pi*t);
plot(t,y);
title('graph of sine function');
xlabel('time')
ylabel('y(t)')

 

 

 

9-2. 두 번째 예제인데 스스로 해보시기 바랍니다.

text()라는 내장 함수가 새로 나옵니다.

text() 내장 함수 사용법은

text(x축 좌표, y축 좌표, '나타내고 싶은 문자');라고 설명할 수 있습니다.

예를 들어  text(3,4, 'aeiou');

라고 입력하면 그래프의 점(3,4)의 위치에 aeiou라는 문자가 나타납니다.

 

 

 

 

 

예제 7b를 직접 해보시기 바랍니다.

 

 

 

 

(유한 엔터)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

힌트를 드리자면 다음과 같습니다.

 

 

(유한 엔터)

 

 

 

 

 

 

전체 코드와 실행화면은 다음과 같습니다.

% 파일 ex7b
t=[0:0.01:2];
y=cos(4*pi*t);
plot(t,y);
title('f(t)vs t graph');
xlabel('t');
ylabel('f(t)');
text(0.5 , 0.5 , 'My graph');

 

https://kr.mathworks.com/help/matlab/creating_plots/add-text-to-specific-points-on-graph.html

 

차트에 텍스트 추가하기 - MATLAB & Simulink - MathWorks 한국

귀하의 시스템에 이 예제의 수정된 버전이 있습니다. 이 버전을 대신 여시겠습니까?

kr.mathworks.com

위 사이트는 matworks(Matlab 만든 회사) 공식 사이트인데 text() 함수에 대한 설명이 자세히 나와있더라고요,,,,,

text로 출력되는 글자들의 크기와 화살표까지 만드는 방법이 나와있었어요.... 한번 따라 해 보는 것도 재밌을 것 같습니다.

 

원하는 좌표로 하는 것보다 마우스 커서를 원하는 곳에 클릭하면 그 지점에 텍스트가 출력되는 gtext()라는 함수가 있습니다. 

다음과 같은 형식으로 작성합니다

txt='20191015 Park Gyubin' 
text(0.5 , 0.5 , txt, 'Fontsize',20);

위와 같은 코드를 입력해서 나타낼 수도 있습니다. 

 

gtext('a', 'FontSize',20)

위와 같은 코드를 입력해주면 Figure창의 원하는 곳에 마우스를 클릭하면 크기가 20인 a가 나타납니다. 

참고로 a자리에 한글을 입력하면 오류가 납니다. 

 

10. 하나의 Figure window에 여러 개의 그래프를 나타내기

이미 전의 포스팅에서 했기 때문에 설명은 하지 않고 문제와  코드 설명 , 실행화면만 보여드리겠습니다. 

https://haai.tistory.com/32?category=800204

14번 subplot를 참고하시면 되겠습니다.

 

 

 

 문제입니다.

 

 

 

 

 

 

 

전체 코드와 실행화면입니다.

2번째 줄에서 단위 요소별 연산자.^를 유의하시기 바랍니다. 어레이 연산을 하지 않으면 벡터 자체에 제곱을 하게 되어서 

 error 가 발생하게 된다. 각 정의역마다 계산을 하기 때문입니다.

 

t=[-2:0.01:2];
x=sin(2*pi*t);
y=t.^2;
subplot(2,1,1);
plot(t,x);
title('graph of x(t)');
xlabel('t');
subplot(2,1,2);
plot(t,y);
title('graph of y(t)');
xlabel('t');

 

 

subplot의 주의점에 대해서 14-2번의 글을 다시 한번 읽고 오면 좋을 것 같아서 링크를 첨부합니다.

https://haai.tistory.com/32

 

내가 공부한 옥타브10-옥타브로 2D그래프 그리기 (7~14)

내공옥 9에서 마지막 Q를 기억하십니까 우리가 수학 시간에는 사인 함수 곱하기 코사인 함수를 이렇게 sin(x) × cos(x) 쓰지만 옥타브에서 입력할 때는 요소별 곱셈 연산자인.* 를 사용해야 합니다. ​ ​..

haai.tistory.com

 

 

 

10-2. 다음 예제입니다.

저번 시간에 공부한 내장 함수 real()과 img()가 나왔네요. subplot () 사용법을 위에서 잘 익혔다면  해결할 수 있는 문제라고 생각합니다.

 

 

 

 

 

 

 

 

 

힌트

 

 

 

 

 

 

 

 

 

 

전체 코드와 실행화면입니다.

%예제8b의 코드입니다.
t=[0:0.01:2];
g=exp(-4*t);
subplot(2,2,1);
plot(t,g);
h=exp(3*t);
subplot(2,2,2);
plot(t,h);
f=cos(4*pi*t)+i*sin(4*pi*t);
x=real(f);
subplot(2,2,3);
plot(t,x);
y=imag(f);
subplot(2,2,4);
plot(t,y);

 

 

 

11. Log scale plot 알아보기

로그 눈금이라는 것은 원래의 x값에 log를 취한 값을 x값으로 하는 눈금입니다.

 

로그 눈금 함수에 대해 설명하자면 다음과 같습니다.

semilogx() 

'x축만 로그 눈금으로 하고 그래프를 출력하여라'라는 명령입니다.

 

semilogy()

'y축만 로그 눈금으로 하고 하고 그래프를 출력하여라'라는 명령입니다.

 

semi- '반 의'라는 의미를 가진 영어단어입니다.

(semiconductor를 반도체라고 하죠.) 

 

loglog() 'x축과 y축 모두 로그 눈금으로 그리로 그래프로 출력하라'는 명령입니다.

 

 

plot명령을 입력할 때와 같은 방식으로 괄호 안에 인자를 입력해주면 됩니다.

위의 세 명령을 쓰면   plot명령은 따로 입력하지 않아도 됩니다.

그래프로 출력하라는 명령까지 같이 가지고 있기 때문입니다.

 

 

 

 

힌트

grid on이라는 것은 좌표축에 격자무늬를 나타내는 코드인데

grid on 그대로 입력하면 격자무늬 가 알아서 생깁니다.

 

 

 

 

 

 

 

 

 

전체 코드와 실행창입니다.

%예제9번 풀이 입니다.
t=[0.1:0.0001:10];
x=-sqrt(t);
y=exp(x);
subplot(1,3,1);
semilogx(t,y);
xlabel('t');%적절히 제목,라벨 붙이기,grid on시키기
title('semilogx');
grid on
subplot(1,3,2)
semilogy(t,y);
xlabel('t');%적절히 제목,라벨 붙이기,grid on시키기
title('semilogy');
grid on
subplot(1,3,3);
loglog(t,y);
xlabel('t');%적절히 제목,라벨 붙이기,grid on시키기
title('loglog');
grid on

 

 

참고로 그냥 x, y눈금을 사용했다면 다음과 같은 그래프가 나옵니다.

원래 exp(x) 그래프에서 y축대칭이 되었고 여기서 지수에 루트가 씌워졌으니 x값이 작아지면서 y값은 조금씩 줄어드는 그래프가 됩니다.

 

 

여기서 x값에 로그를 취하고 y값을 그대로 두려면 semilogx를 사용하고

반대로 x값을 그대로 두고 y값에 로그를 취하려면 semilogy를, 

x, y값 모두에게 로그를 취하려면 loglog()라는 내장 함수를 사용합니다.

 

 

 

 

 

%예제 9a 조금 다른 format입니다. 
%개인적으로 더 깔끔해보이는데 각자 마음에 드는 형태의
%코드를 따라하시면 될것 같습니다.

t=[0.1:.1:10]
f=exp(-sqrt(t))

subplot(1,3,1);semilogx(t,f);grid on
xlabel('t');title('semilogx')

subplot(1,3,2);semilogy(t,f);grid on
xlabel('t');title('semilogy')

subplot(1,3,3);loglog(t,f);grid on
xlabel('t');title('loglog')

 

t의 증분을 좀더 크게 하면 위와 같이 오른쪽 아래가 끊기지 않고 나옵니다. 

 

반응형
Comments