3D그래프 그리는 방법은 2차원 평면 그래프 그리는 방법과 별반 차이가 없다.
그저 z축 하나만 추가된 형태라 변수와 for문을 하나씩 추가해주고
3차원 그래프로 출력하기 위해 plot()함수 대신 surf()함수를 작성해 준다.
2차원 평면을 생각해보면 x는 input 이고 y는 x에 의한 output이다. 따라서 input x만 변화해주면 output y는 자동적으로 변하게 되었지만
이를 3차원 으로 확장하면 x, y 둘다 input으로 설정하고 두 input x, y에 관한 output변수를 따로 생성해 주면 된다.
이번 프로그램에서는 output변수를 Gr(=Graph)로 설정해 주었다.
len_x=100;
len_y=100;
x=linspace(-1,1,len_x);
y=linspace(-1,1,len_y);
Gr=zeros(len_x,len_y);
for x_index=1:len_x
for y_index=1:len_y
Gr(x_index,y_index)=x(x_index)^2+y(y_index)^2; //(x^2+y^2)형태의 그래프
end
end
surf(x,y,Gr);
colormap spring;
colorbar;
xlabel('x축임');
ylabel('y축임');
zlabel('z축임');
title('밥그릇임');
Gaussian Graph 2D & 3D
이제 3차원 그래프도 그릴 줄 알았겠다
확률과 통계에서 자주 나오는 가우시안 분포 그래프를 2차원, 3차원 으로 나열해서 비교 해 보자.
우선 input x와 y에 -10부터 10까지 100개의 공간을 할당해 주고
for문으로 하나하나씩 연산하여 Gr1, Gr2에 대입한다.
이때, for문은 x_index와 y_index 둘다 1부터 100까지 설정해 줘서 x, y의 값과 1 : 1 mapping이 가능하도록 하자.
len_x=100;
len_y=100;
x=linspace(-10,10,len_x);
y=linspace(-10,10,len_y);
Gr1=zeros(1,len_x);
Gr2=zeros(len_x,len_y);
for x_index=1:len_x
Gr1(x_index)=(1/sqrt(pi))*exp((-x(x_index)^2)/2); //2차평면
end
for x_index=1:len_x
for y_index=1:len_y
Gr2(x_index,y_index)=(1/pi)*exp(-(((x(x_index)^2)+(y(y_index)^2)))/2); //3차원
end
end
subplot(2,1,1);
plot(x,Gr1);
subplot(2,1,2);
surf(x,y,Gr2);
xlabel('x축임');
ylabel('y축임');
title('종모양임')
이렇게 식을 대입해서 가우시안 분포 그래프를 그렸는데 다른 형태로도 표현을 해보자.
매트랩 기본 함수중에 randn()이라는 함수가 있는데 이 함수는 독특하게 randn(1,100)이라고 선언하면
0을 기준으로 정규분포화된 난수를 생성하기 때문에 이를 그래프화 하면 똑같이 종모양처럼 나올 것이다.
정말 그러한지 확인해보자!
x=randn(1,10000); //x의 값을 난수로 10000개를 생성한다.
x_range=linspace(-5,5,41); //x의 범위를 -5부터 5까지 40등분을 한다
cnt=zeros(1,41); //cnt로 x의 값을 하나하나 카운트한다
for x_index=1:10000
for comp=1:41
if(x(x_index)>(-5.25+(0.25*comp)))&&(x(x_index)<(-5+(0.25*comp))) //x를 0.25간격으로 비교해서
cnt(comp)= cnt(comp)+1; //카운트한다
end
end
end
bar(x_range,cnt);
hold on;
plot(x_range,cnt/2,'-s'); //평균값
이를 보면 앞서 확인해 본 결과와 같은 종모양 형태를 확인할 수 있다.
다음엔 그래프의 색, 축, 제목변경 등 다양한 명령어에 관해 포스팅을 해보자.
[MATLAB] 그래프 설정 명령어 (tistory.com)
'MATLAB' 카테고리의 다른 글
[MATLAB] 이미지 분석 & 히스토그램(RGB histogram) (0) | 2021.07.09 |
---|---|
[MATLAB] 그래프 설정 명령어 (0) | 2021.07.07 |
[MATLAB] 여러 그래프 띄우기(subplot()) (0) | 2021.07.06 |
[MATLAB] 간단한 함수 & 그래프 그리기(plot() 함수) (0) | 2021.07.06 |
[MATLAB] linspace(), zeros(), ones() 함수 (0) | 2021.07.06 |