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

공머씨의 블로그

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

내가 공부한 옥타브(매틀랩)/내가 공부한 옥타브

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

공머씨 2020. 3. 11. 23:10
반응형

내공옥 9에서 마지막 Q를 기억하십니까

우리가 수학 시간에는 사인 함수 곱하기 코사인 함수를

이렇게

sin(x) × cos(x)

쓰지만

옥타브에서 입력할 때는 요소별 곱셈 연산자인.* 를 사용해야 합니다.

7. 삼각함수끼리 곱을 나타낸 그래프 입출력 하기

일단 삼각함수의 곱의 그래프의 생김새가 어떤지 알아봅시다. 옥타브를 하는데에 알 필요는 없으나 왜 저렇게 생겼나 궁금증이 생기실 것 같아서 설명합니다.

삼각함수의 곱의 그래프는 지오지브라 어플을 사용해서 알게 된 결과는 다음과 같습니다.

f(x)는 sin 함수와 cos함수의 곱을 나타내는 그래프입니다

f(x)와 sin 함수가 같이 있는 그래프입니다.

f(x)와 cos 함수가 같이 있는 그래프입니다

sin함수와 cos 함수가 같이 있는 그래프입니다.

f(x), sin함수, cos 함수가 같이 있는 그래프입니다

일단 그래프로 생김새를 알아보았고

저 함수의 주기와 최대, 최솟값이 어떻게 정해졌는지 알기 위해 수학적으로 증명해 보겠습니다.

일단 삼각함수가 곱해져 있는 꼴은 삼각함수의 덧셈 꼴로 나타낼 수 있습니다.

아래와 같이 정리되는 이유는 삼각함수의 덧셈 정리로부터 나온 공식을 활용하면 쉽게 정리할 수 있습니다.

위 식에서 A, B 대신 모두 X를 대입합니다.

 

그러면 곱을 합으로 나타내는 공식에 대입해서 보면

다음과 같아집니다

 

따라서 사인 함수 곱하기 코사인 함수는

위와 같게 됩니다.

삼각함수에 대해 공부했다면

함수 앞에 있는 것은 최댓값 최솟값을 조절하고 (진폭) 정의역에 곱해진 숫자는 주기를 조절합니다.

그래서 사인 함수 곱하기 코사인 함수 그래프의 생김새가 사인 함수의 진폭에서 반, 주기도 반으로 줄어든 개형을 가지게 됩니다.

이제 코드에 대해서 살표 보겠습니다.

x = 0 : 0.1 : 2*pi                         % x축 데이터 생성

y = sin(x).*cos(x)                         % y축 데이터 생성

plot(x, y)                                    % plot(x, y)를 plot(정의역, 치역) 이렇게 기억해두면 편하다.

 

 

x, y 순서 그대로 기억하면 시험에서 정의역의 변수를 y로 설정하고 치역의 변수를 x로 설정하는 경우 헷갈린다.

말이 길어지지만 이것뿐만 아니라 수학, 물리 공부를 할 때도 모국어로 기억하기 쉽게 기억해두는 습관이 필요하다고 생각한다.

(우리가 평소 에쓰는 곱을 옥타브에 그대로 쓰지 말고 반드시 앞에 단위 요소 연산자. 을 작성해야 합니다. - 빨간 글씨 주의)

다음과 같이 실행됩니다.

eight라는 이름의 m파일로 저장한 뒤 comand window창에서 eight를 입력했습니다.

8. 두 가지 함수를 한 좌표에 표기 하기

​일단 아래 두 코드를 입력해봅니다.

1)

x = linspace(0,2*pi,30)

y1 = sin(x)

y2 = cos(x)

Y = [y1;y2]          

plot(x, Y)

2)

x = linspace(0,2*pi,30)

y1 = sin(x)

y2 = cos(x)

plot(x, y1, x, y2)          

1) 2) 번 모두 같은 그래프가 나옵니다.

 

night라는 이름의 m파일로 저장한 뒤 실행한 모습입니다.

 

 

1)번에서는 Y라는 매개변수를 통해 y1, y2를  나타내 주어서

따로따로 입력하지 않아도 된다는 차이점이 있습니다.

​위에서 두 그래프가 한 좌 표에 표시되도록 하는 함수는

마지막 줄의 plot(x, Y)와 plot(x, y1, x, y2)입니다. 직관적으로 이해할 수 있으니 설명은 생략하겠습니다.

 

그러면 linspace가 뭐지???

linspace에 대해서 알아보겠습니다.

linspace는 행 벡터를 반환해주는 함수입니다.

 

문법은 아래와 같습니다.

​​linspace(시작 값, 끝 값, 벡터 크기)

시작 값부터 끝 값까지 균일한 간격으로 '벡터 크기;만큼의 벡터를 생성합니다.

 

9. 함수의 그래프를 실선이 아닌 점선으로도 나타낼 수 있고 원하는 색깔로 도 바꿀 수 있습니다.

다음 표를 참고하시기 바랍니다.

​위의 표를 알았으니 옥타브에서 어떻게 입력하면 되는지 알아보겠습니다.

 

plot(정의역, 치역) 여기까지는 알고 있었던 문법인데 

그래프의 색상, 표시자, 선의 종류를 바꾸고 싶다면

 

​plot(정의역, 치역, '심벌')

위와 같이 입력하면 됩니다.

예를 들어 ​plot(정의역, 치역, 'k')라고 입력하면 

색깔이 검은색인 그래프가 그려집니다.

 

 

만약 색상 하나뿐만 아니라 생상과 표시자, 선의 종류를 동시에 바꾸고 싶다면

색 , 선의 종류, 표시자 

를 함께 입력해주시면 됩니다.

제가 확인해본 결과 순서는 상관없습니다. 다만 헷갈리지 않도록 하려면

되도록 색상을 나타내는 영문자 표시자를 나타내는 특수기호 선의 종류를 나타내는 기호의 순서대로 잘 지켜서 입력하시는 것을 권장합니다. 

예를 들어  검은색인데 표시자가 별로 그려지고 점선인 그래프를 그리고 싶다면

plot(정의역, 치역, 'k*:')

위와 같이 입력하시면 되겠습니다.

10. 사인 함수와 코사인 함수의 그래프를 색과 표시자를 바꾸어 그리기

 

위 9번 설명을 잘 읽어 보셨으면 아래 문제도 잘 해결할 수 있을 것 같습니다.

​Q: 정의역은 1부터 10까지 0.1 씩 증가하는

사인의 그래프와 코사인의 그래프를 그려라

단 사인의 그래프는 검은색 실선

코사인의 그래프는 * 모양이 찍히도록 그려라

추가적으로 정의역의 이름은 a 코사인 함수의 이름은 b 사인 함수의 이름은 c로 설정하시오.

 

 

​a=1: 0.1 :10
b= cos(x)
c= sin(x)
plot(a, b, '*', a, c, 'k')

ten이라는 m파일로 저장한 뒤 실행시켰습니다.

11. 사인 함수와 코사인 함수의 그래프를 색과 표시자, 선의 종류를 바꾸어 그리기

위와 마찬가지로 9번을 꼼꼼하게 읽으셨다면 충분히 해결할 수가 있는 문제입니다.​

 

Q

​정의역은 1부터 10까지 0.1 씩 증가하는

사인의 그래프와 코사인의 그래프를 그려라

단 사인의 그래프는 파란색 실선

코사인의 그래프는 진홍색이면서 +표시자 이면서 실선의

모양이 찍히도록 그려라

 

 

 

 

 

 

 

 

 

 

(유한 엔터)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

​a=1: 0.1: 10 
b=cos(x) 
c=sin(x) 
plot(a, b, 'b:', a, c, 'm+') 

 

12. 축 라벨 생성하기

figure창에 그려진 좌표에서 가로축은 정의역의 인덱스라고 하였습니다.

그래서 정의역의 순서와 값을 대조해봐야 알아낼 수 있는 불편함이 있습니다.

(사실 프로그램상에서 그래프를 띄우면 마우스를 갖다 대면 해당 정의역과 치역이 바로 나타나기는 합니다.)

그래프를 좀 더 직관적으로 알아볼 수 있으려면 가로축이 정의역의 인덱스 값이 아닌 정의역의 값으로 나타나게끔 해주면 됩니다.

코드와 사진을 바로 살펴보도록 하겠습니다.

 

 

 

x=0: 0.1 : 10 
y=sin(x)./x         % 곱하기뿐만 아니라 나누기도 요소별 연산자를 사용해주었음에 유의한다.
plot(x, y)
title('graph of sin(x)/x')% 제목은  ''안에 있는 문자열이 그대로 출력된다.
xlabel('x')           % xlabe의 이름을   ''안에 있는  x로 출력된다.
ylabel('y')           % ylabe의 이름을   ''안에 있는  y로 출력된다.

 

여기서

xlabel('x')          
ylabel('y')   

에서 ''안의 문자열, 문자는 영어로 입력해주어야 합니다. 그리고  x대신에 time라고 입력하면

xlabel에 time 이 써진 그래프가 보입니다.

 

13. 각 축의 화면에 보이는 범위를 조절하는 axis() 함수

axis() 함수는  x축 y축의 화면에 보이는 값을 조절해주는 함수이다.

즉 최대 최솟값을 설정할 수 있다는 이야기이다.

axis: 축, 축선  이라는 뜻을 가진 단어이다.

 

 

문법은 다음과 같다.

axis([XMIN XMAX YMIN YMAX])  
XMIN와 XMAX는 각각 x축의 최솟값과 최댓값을 

YMIN와 YMAX는 각각 y축의 최소값과 최댓값을 표기한다.

 

 

 

위의 내용을 이해했다면

Q . 12번의 그래프에서 x축은 2~8까지 보이고

y축은 -0.2 ~0.6까지 보이도록 하는 코드를 작성하여라.

 

12번 그래프를 그리는 데 사용된 코드를 다시 입력하지 않아도 된다.

m파일을 새로 만들지 않고

Editor ckddptj 마지막에 코드 한 줄을 추가한다.

Editor 창에서  저장버튼을 누른다.

그다음에 comand  window에서 Current dictory를 m파일이 있는 위치로 보이게 한 뒤

twelve를 호출하면 

comand window에서 추가된 코드까지 실행된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

코드는 다음과 같다.

x=0: 0.1 : 10 
y=sin(x)./x                  
plot(x, y)
title('graph of sin(x)/x') 
xlabel('x')                  
ylabel('y')   

axis([2 8 -0.2 0.6])

 

그래프에서 보다시피 axis() 함수가 작동되었음을 알 수 있습니다.

또 기존의  어떤 코드에 한두 줄의 코드가 추가된다면  m파일을 이용해 손쉽게 

이래서 m파일이 유용한 것입니다.

14. subplot

한 개의 창에서 그래프를 다 보고 싶은데 각각의 그래프가 서로 다른 좌표에서 즉 겹치지 않게끔 보고 싶을 때는

subplot명령을 사용하시면 됩니다.

 

subplot (창에서의 행의 개수, 창에서의 열의 개수 , 몇 번째 칸 에 그리고 싶은지 )

2줄 2칸으로 설정을 한다면 

한창에서 가상으로 다음과 같은 번호가 매겨져 있습니다.

 

아래의 Figure창에서는 2행 2열의 가상의 표가 있고

그래프 A는 2번째 칸에 그려져 있습니다.   

그래프 B는  3번째 칸에 그려져 있습니다.

주의할 것은 숫자 1234가 있는 칸을 제1사분면 제2 사분면과 같이 혼동해서는 안됩니다.

 

 

 

 

위와는 다르게 

그냥 2줄로만 가상의 표를 나타내고

그래프 A가 첫 번째 줄을 차지하게

그래프 B가 두 번째 줄을 차지하게 그리려면

 

공부한 행렬의 개념을 이용해서

subplot (2,1,1) plot(x, A(x)) % subplot에서 보이는 것과 같이  2행 1열로 가상의 표를 나타내고 그중에서 첫 번째 칸에 A의 그래프가 그려지도록 한다.

subplot (2,1,2) plot(x, B(x)) % subplot에서 보이는 것과 같이  2행 1열로 가상의 표를 나타내고 그중에서 두 번째 칸에 B의 그래프가 그려지도록 한다

 

 

 

14-2. subplot 사용시 주의 할 점

subplot 의 의미가

FigureWindow에서 구획을 어떻게 나누라고 하는 명령어 입니다. 

몇번째 구획에 뭐를 plot을 할지 말해주는 겁니다. 

 

그래서 subplot()와 plot()의 작성순서는 매우 중요합니다. 

1. subplot() plot()의 순서로 그래프를 그릴 경우 : 구획을 나누고 그래프 그려라

2. plot() subplot()의 순서로 그래프를 그릴 경우 : 그래프를 그리고 구획을 나눠라

라는 의미이기 때문에

subplot ()의 명령어를 먼저 사용하고 plot해주어야 합니다. 

만약 2와 같이 해주었다면 plot가 나타나지 않게 됩니다. 

 

 

 

 

코드로 설명하자면 다음과 같습니다. 

plot(t,x) % figure 전체 영역에 (t,x) 그래프를 그린다.
subplot(2,1,1) % 방금 그래프는 지워버리고, 구역을 2x1로 나누고, 그 중 첫번째에 subplot 영역을 만든다.
plot(t,y) % 방금 만든 subplo 영역에 (t,y) 그래프를 그린다.
subplot(2,1,2) % 두번째 구역에 subplot 영역을 만든다.

만약 이차함수와 삼각함수의 그래프를 그린다면 아래와 같은 오류가 발생합니다. 

순서대로 코드를 하나씩 실행해보면서 어떤 과정을 거쳐서 오류가 생기는지를 알아보겠습니다. 

 

 

%첫번째 코드입니다. (plot,suplot의 순서)

t=[-2:.01:2]
x=sin(2*pi*t) 
plot(t,x) 
subplot(2,1,1) 

y=t.^2 
plot(t,y)
subplot(2,1,2) 

 

1.

 

2.  4번째 줄의 subplot의 의미 입니다. 방금 그래프는 지워버리고, 구역을 2x1로 나누고, 그 중 첫번째에 subplot 영역을 만든다.

 

 

3. 실행시켜보면 삼각함수 그래프가 순간적으로 보였다가 아래와 같이 나타납니다. 

 

 

 

 

4.

 

 

5.

 

 

 

 

 

그림처럼 됩니다 그려진거 위에 다시 그리는 것 입니다.  

이렇게 되면 기존의 그래프인 삼각함수 그래프가 사라지게 됩니다. 

 

어떤 매트랩 고수님은 

figure, 
subplot(2,1,1), plot(t,x)
subplot(2,1,2), plot(t,y)

이런형식으로 고정시켜서 작성한다고 하십니다. 

 

제대로된 순서로 코드를 작성하면 아래와 같습니다. 

subplot가 어떻게 작동하는지 알고 싶으면 아래와 같이 코드를 하나씩 실행해보는것도 좋을것 같습니다. 

 

 

%두번째 코드입니다. (suplot, plot의 순서)

t=[-2:.01:2]
x=sin(2*pi*t) 
subplot(2,1,1) 
plot(t,x) 

y=t.^2 
subplot(2,1,2) 
plot(t,y)

 

1.

 

 

 

 

2.

 

 

 

 

 

3.

 

 

 

 

 

4.

 

 

 

 

 

15. 한 창에서 4개의 그래프가 나올 수 있도록 분할하여 사인 그래프와 코사인 그래프 그리기

 

 

 

그림에서는 잘렸지만 그래프가 그려져 있는 창은 figure 창입니다.

​fifteen이라는 이름의 m파일로 저장한 뒤 실행시켜 주었습니다.

16. 한 창에서 4개의 그래프가 나올 수 있도록 분할하여 사인 그래프와 코사인 그래프 그리기

 

 

 

마찬가지로 위의 14번에 설명을 잘 읽어 보았다면 어렵지 않게 해결할 것입니다.

 

x=linspace(0,2*pi,100)

subplot(211), plot(x, sin(x))

subplot(212), plot(x, cos(x))

반응형
Comments