고등학생 때 배운 여러 함수를 쉽게 그리는 방법을 알아보겠습니다. 추가로 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 등을 이용해서 좀 더 정리를 해보겠습니다.
'지식공학 > Matlab' 카테고리의 다른 글
Spring Mass Damped System 풀이 (0) | 2020.11.13 |
---|---|
Matlab 1차 미분방정식 풀이 (문제와 코드 공개) (0) | 2020.11.10 |
매트랩 방정식 풀기(미분, 적분) (0) | 2020.11.04 |
Matlab 그래프 명령어 정리 (plot) (1) | 2020.11.02 |
댓글