이전 포스트들에서 설명한 plot(a,b) 명령어에서는 a벡터를 x축에, b벡터를 y축에 선형 스케일로 2차원 그래프를 그린다. 수학이나 공학에서는 넓은 영역의 값을 한 그래프에 나타내기 위해 때때로 로그 단위의 그래프를 그릴 필요가 있다. 특히 주파수를 기본 축으로 하는 함수에서는 그 값이 일반적으로 log 단위로 표시되는데 이때 사용되는 명령어로는 아래와 같이 semilogx(), semilogy(), loglog() 등이 있다. 그리고 극좌표 스케일의 그래프를 그릴 때는 polar() 함수를 사용한다.

[표 1] 로그 스케일 그래프를 생성하는 함수

loglog(a,b)

x축과 y축 모두 로그 스케일인 그래프 생성

semilogx(a,b)

x축만 로그 스케일인 그래프 생성

semilogy(a,b)

y축만 로그 스케일인 그래프 생성

polar(a,b)

극좌표 그래프를 그린다

 예를 들어 다음의 식을 고려해보자.

먼저 x축의 값인 주파수를 로그단위로 나타내 보자. 함수 logspace()를 사용하면 일정한 상용 로그값 차이를 갖는 벡터를 만들어 준다.


>> w = logspace(-1,2,100)
>> H = 1 ./(1+w.^2).^0.5
>> semilogx(w,H)
>> grid on


벡터 w에는 10-1(rad/sec)에서 102 (rad/sec)까지의 값을 100등분하여 로그값을 저장한다. 즉, logspace() 함수는 다음과 완전히 동일하다.


>> w = 10.^linspace(-1,2,100)


x축을 log 스케일로 그리는 그래프는 semilogx() 함수를 이용하면 된다.

[그림 1] 실행 결과 (gnu octave 실행 결과를 캡쳐)


 polar()함수는 극좌표계의 그래프를 그려준다. 입력 인수로 거리와 각도를 각각 받는다. 즉 polar(r, a) 에서 r은 거리의 벡터, a는 각도(단위는 라디안)의 벡터로 주어져야 한다.


>> polar(0:10, 0:10)


[그림 2] 실행 결과 (gnu octave 실행 결과를 캡쳐)


polar()함수가 그림을 그리는 원리는 plot()함수와 동일하다. (거리, 각도) 쌍의 점을 찍은 후 그것들을 선으로 이어주는 것이다. 선의 색/모양을 지정하는 방법은 polt()함수와 동일하다.


>> t=linspace(0,pi,100)
>> polar(sin(t), cos(t))


[그림 2] 실행 결과 (gnu octave 실행 결과를 캡쳐)


이렇게 MATLAB에서 로그스케일 그래프와 극좌표 그래프를 쉽게 생서할 수 있다.



Posted by 살레시오