본문 바로가기
지식공학/Matlab

matlab 함수(포물선,원,타원,쌍곡선) 쉽게 그리기 feat.subplot

by Eric87 2020. 11. 3.
반응형

고등학생 때 배운 여러 함수를 쉽게 그리는 방법을 알아보겠습니다. 추가로 matlab에서 plot을 활용하여 다양한 그래프를 한 창에 그릴 수 있습니다.

먼저 포물선 입니다. 우리가 알고 있는 포물선은 이차방정식을 함수로 표현한 것입니다. 이를 매틀랩에서는 다음과 같이 표현할 수 있습니다.

>> x = linspace(-50,50,100);

>> a = 2;

>> c = [0 0];

>> y = a*(x-c(1)).^2+c(2);

>> plot(x,y)

하지만 syms라는 함수를 이용하면 좀 더 직관적으로 그래프를 그릴 수 있습니다.

>> syms x y

>> parabola = y==2*x^2

syms는 해당 문자를 변수로 선언하겠다는 것입니다. 위 코드는 parabola라는 함수에 y=2*x^2으로 표현하고 해당 그래프는 fimplicit로 그릴 수 있습니다.

>> fimplicit(parabola)


syms를 사용하지 않고 그래프를 그리기 위해서는 범위를 선정하고 x값을 형렬로 만들어 준 뒤 관계식으로 y값을 형렬로 만들어 plot을 하는 방법입니다. syms를 이용하면 행렬의 생성 부분이 생략되고 바로 관계식만으로 그래프를 그릴 수 있습니다. syms에서 변수의 범위는 -5에서 5까지 기본값으로 설정되어 있습니다.
같은 방법으로 원을 그려보도록 하겠습니다.

>> syms x y

>> circle = x^2 + y^2 == 3;

>> fimplicit(circle)

>> axis equal

원의 방정식 x^2+y^2 = r^2를 바로 그릴 수가 있습니다. 만약 syms를 사용하지 않고 그리려면

>> theta=linspace(0,2*pi);

>> r=1; % radius

>> c=[2 3]; %center

>> x=r*cos(theta)+c(1);

>> y=r*sin(theta)+c(2);

>> plot(x,y)

>> axis equal

위 와같이 작성을 해야겠죠 axis equal를 사용하는 이유는 x축과 y축의 크기를 동일하가 맞추어 함수가 왜곡되어 보이는 것을 방지하기 위함입니다.

다음은 타원을 그려보겠습니다.

>> ellips = x^2/2^2+y^2/1^2 == 1;

>> fimplicit(ellips)

타원의 경우 장축과 단축 정보가 필요하기 때문에 예시로 장축을 2, 단축을 1로 하여 타원을 그려보았습니다. 마찬가지로 syms를 사용하지 않고 타원 함수를 그리려면

>> theta=linspace(0,2*pi);

>> a=1; % minor axis

>> b=2; % major axis

>> c = [0 0]; %center

>> x=a*cos(theta)+c(1);

>> y=b*sin(theta)+c(2);

마지막으로 쌍곡선입니다.

>> hyperbola = x^2 - y^2 == 1;

>> fimplicit(hyperbola)

syms로 간단한 포물선과 원, 타원, 쌍곡선을 표현하는 방법과 그래프를 그리는 방법을 알아보았습니다. 위 네 개의 그래프를 한 창에 모두 표현을 해보겠습니다. subplot을 활용해서 그릴 수 있습니다. subplot은 구역을 나누고 각 구역에 그래프를 표현함으로써 여러 그래프를 한 번에 보여줄 때 유용하게 사용할 수 있습니다. subplot(행 개수, 열 개수, 순번)입니다. 순번은 행렬 번호와 동일한 순서로 생각하시면 됩니다.

>> figure(1)

>> subplot(2,2,1)

>> fimplicit(parabola)

>> subplot(2,2,2)

>> fimplicit(circle)

>> subplot(2,2,3)

>> fimplicit(ellips)

>> subplot(2,2,4)

>> fimplicit(hyperbola)

이전에 배운 grid와 label 등을 이용해서 좀 더 정리를 해보겠습니다.

 

반응형

댓글