이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
fsurf
3차원 곡면 플로팅
구문
설명
fsurf(
는 f
,[xmin xmax ymin ymax]
)x
의 구간 [xmin xmax]
및 y
의 구간 [ymin ymax]
에 f(x,y)
를 플로팅합니다. fsurf
함수는 symvar
을 사용하여 변수의 순서를 정렬하고 구간을 할당합니다.
fsurf(
는 funx,funy,funz
)u
와 v
의 구간 [-5 5]
에 파라미터 곡면 x = x(u,v)
, y = y(u,v)
, z = z(u,v)
를 플로팅합니다.
fsurf(
는 funx,funy,funz
,[uvmin uvmax]
)u
와 v
의 구간 [uvmin uvmax]
에 파라미터 곡면 x = x(u,v)
, y = y(u,v)
, z = z(u,v)
를 플로팅합니다.
fsurf(
는 funx,funy,funz
,[umin umax vmin vmax]
)u
의 구간 [umin umax]
및 v
의 구간 [vmin vmax]
에 파라미터 곡면 x = x(u,v)
, y = y(u,v)
, z = z(u,v)
를 플로팅합니다. fsurf
함수는 symvar
을 사용하여 파라미터 변수의 순서를 정렬하고 구간을 할당합니다.
fsurf(___,
은 LineSpec
)LineSpec
을 사용하여 선 스타일, 마커 기호, 면 색을 설정합니다. 위에 나와 있는 입력 인수의 조합 다음에 이 옵션을 사용하십시오.
fsurf(___,
는 하나 이상의 Name,Value
)Name,Value
쌍의 인수를 사용하여 line 속성을 지정합니다. 위에 열거된 구문에 나와 있는 입력 인수의 조합 다음에 이 옵션을 사용하십시오.
fsurf(
는 현재 axes 객체 ax
,___)gca
대신 객체 ax
로 지정된 좌표축에 플로팅합니다.
는 곡면 유형에 따라 function surface 객체 또는 parameterized function surface 객체를 반환합니다. 이러한 객체를 사용하여 특정 곡면의 속성을 쿼리하고 수정할 수 있습니다. 자세한 내용은 FunctionSurface 속성와 ParameterizedFunctionSurface 속성를 참조하십시오.fs
= fsurf(___)
예제
기호 표현식의 3차원 곡면 플롯
디폴트 범위 와 에 입력값 를 플로팅합니다.
syms x y fsurf(sin(x)+cos(y))
기호 함수의 3차원 곡면 플롯
디폴트 범위 와 에 의 실수부를 플로팅합니다.
syms f(x,y)
f(x,y) = real(atan(x + i*y));
fsurf(f)
곡면 플롯의 플로팅 구간 지정하기
플로팅 구간을 fsurf
의 두 번째 인수로 지정하여 와 에 를 플로팅합니다.
syms x y f = sin(x) + cos(y); fsurf(f, [-pi pi -5 5])
파라미터화된 곡면 플롯
파라미터화된 곡면을 플로팅합니다.
범위는 와 입니다.
camlight
를 사용하여 플롯의 모양을 개선합니다.
syms s t r = 2 + sin(7*s + 5*t); x = r*cos(s)*sin(t); y = r*sin(s)*sin(t); z = r*cos(t); fsurf(x, y, z, [0 2*pi 0 pi]) camlight view(46,52)
조각별 표현식의 곡면 플롯
클라인 병의 조각별 표현식을 플로팅합니다.
범위는 와 입니다.
클라인 병에는 한 쪽 곡면만 있음을 보여줍니다.
syms u v; r = @(u) 4 - 2*cos(u); x = piecewise(u <= pi, -4*cos(u)*(1+sin(u)) - r(u)*cos(u)*cos(v),... u > pi, -4*cos(u)*(1+sin(u)) + r(u)*cos(v)); y = r(u)*sin(v); z = piecewise(u <= pi, -14*sin(u) - r(u)*sin(u)*cos(v),... u > pi, -14*sin(u)); h = fsurf(x,y,z, [0 2*pi 0 2*pi]);
제목과 축 레이블 추가하고 눈금 지정하기
와 에 대해 에서 까지 3차원 곡면 를 플로팅합니다. 제목과 축 레이블을 추가합니다.
pi/2
간격으로 x축 제한 범위 내에 x축 눈금을 만듭니다. round
를 사용하여 축 제한을 pi/2
의 정확한 배수로 변환하고 기호 눈금 값을 S
로 가져옵니다. XTick
속성을 사용하여 이러한 눈금을 표시합니다. texlabel
을 S
에 적용하도록 arrayfun
을 사용하여 x축 레이블을 만듭니다. XTickLabel
속성을 사용하여 이러한 레이블을 표시합니다. y축에 대해 위 단계를 반복합니다.
플롯에서 LaTeX을 사용하려면 latex
항목을 참조하십시오.
syms x y fsurf(y.*sin(x)-x.*cos(y), [-2*pi 2*pi]) title('ysin(x) - xcos(y) for x and y in [-2\pi,2\pi]') xlabel('x') ylabel('y') zlabel('z') ax = gca; S = sym(ax.XLim(1):pi/2:ax.XLim(2)); S = sym(round(vpa(S/pi*2))*pi/2); ax.XTick = double(S); ax.XTickLabel = arrayfun(@texlabel,S,'UniformOutput',false); S = sym(ax.YLim(1):pi/2:ax.YLim(2)); S = sym(round(vpa(S/pi*2))*pi/2); ax.YTick = double(S); ax.YTickLabel = arrayfun(@texlabel,S,'UniformOutput',false);
곡면 플롯의 선 스타일과 너비
의 다양한 값에 대해 각기 다른 선 스타일을 사용하여 파라미터 곡면 , , 를 플로팅합니다. 의 경우, 녹색 점 마커가 있는 파선을 사용합니다. 의 경우 LineWidth
1
과 녹색 면 색을 사용합니다. 의 경우, EdgeColor
를 none
으로 설정하여 선을 제거합니다.
syms s t fsurf(s*sin(t),-s*cos(t),t,[-5 5 -5 -2],'--.','MarkerEdgeColor','g') hold on fsurf(s*sin(t),-s*cos(t),t,[-5 5 -2 2],'LineWidth',1,'FaceColor','g') fsurf(s*sin(t),-s*cos(t),t,[-5 5 2 5],'EdgeColor','none')
곡면 생성 후 수정하기
다음 파라미터 곡면을 플로팅합니다.
fcontour
가 plot 객체를 반환하도록 출력값을 지정합니다.
syms u v x = exp(-abs(u)/10).*sin(5*abs(v)); y = exp(-abs(u)/10).*cos(5*abs(v)); z = u; fs = fsurf(x,y,z)
fs = ParameterizedFunctionSurface with properties: XFunction: exp(-abs(u)/10)*sin(5*abs(v)) YFunction: exp(-abs(u)/10)*cos(5*abs(v)) ZFunction: u EdgeColor: [0 0 0] LineStyle: '-' FaceColor: 'interp' Show all properties
fs
의 URange
속성을 사용하여 u
의 범위를 [-30 30]
으로 변경합니다. EdgeColor
속성을 사용하여 선 색을 파란색으로 설정하고, Marker
속성과 MarkerEdgeColor
속성을 사용하여 흰색 점 마커를 지정합니다.
fs.URange = [-30 30]; fs.EdgeColor = 'b'; fs.Marker = '.'; fs.MarkerEdgeColor = 'w';
여러 곡면 플롯과 투명 곡면
fsurf
에 대한 벡터 입력값을 사용하여 여러 곡면을 플로팅합니다. 또는 hold on
을 사용하여 동일한 Figure에 연속해서 플로팅합니다. 동일한 Figure에 여러 곡면을 표시할 때는 투명도가 유용합니다. FaceAlpha
속성을 사용하여 곡면 플롯의 투명도를 조정합니다. FaceAlpha
는 0
부터 1
까지의 값을 갖습니다. 값이 0
이면 완전히 투명하고 1
이면 불투명합니다.
fsurf
에 대한 벡터 입력값을 사용하여 평면 와 를 플로팅합니다. FaceAlpha
를 사용하여 두 평면을 반투명으로 만들어서 둘 다 표시합니다.
syms x y h = fsurf([x+y x-y]); h(1).FaceAlpha = 0.5; h(2).FaceAlpha = 0.5; title('Planes (x+y) and (x-y) at half transparency')
곡면 플롯의 해상도 제어하기
'MeshDensity'
옵션을 사용하여 곡면 플롯의 해상도를 제어합니다. 'MeshDensity'
값을 키우면 더욱 부드럽고 정확한 플롯을 만들 수 있으며, 줄이면 플로팅 속도를 높일 수 있습니다.
subplot
을 사용하여 Figure를 두 개로 나눕니다. 첫 번째 서브플롯에 파라미터 곡면 , , 을 플로팅합니다. 곡면에 큰 간격이 있습니다. 두 번째 서브플롯에서 'MeshDensity'
를 40
으로 늘려 이 문제를 수정하십시오. fsurf
는 간격을 채우며, 이를 통해 'MeshDensity'
값을 늘리면 플롯의 해상도가 증가함을 알 수 있습니다.
syms s t subplot(2,1,1) fsurf(sin(s), cos(s), t/10.*sin(1./s)) view(-172,25) title('Default MeshDensity = 35') subplot(2,1,2) fsurf(sin(s), cos(s), t/10.*sin(1./s),'MeshDensity',40) view(-172,25) title('Increased MeshDensity = 40')
곡면 플롯 아래에 등고선 표시하기
'ShowContours'
옵션을 'on'
으로 설정하여 표현식 f
의 곡면 플롯에 대해 등고선을 표시합니다.
syms x y f = 3*(1-x)^2*exp(-(x^2)-(y+1)^2)... - 10*(x/5 - x^3 - y^5)*exp(-x^2-y^2)... - 1/3*exp(-(x+1)^2 - y^2); fsurf(f,[-3 3],'ShowContours','on')
곡면 플롯의 애니메이션 만들기
Function
, XFunction
, YFunction
및 ZFunction
속성을 사용하여 표시된 표현식을 변경한 다음 drawnow
를 통해 플롯을 업데이트하여 애니메이션을 만듭니다. GIF로 내보내려면 imwrite
를 참조하십시오.
변수 i를 1부터 3까지 변화시키면서 파라미터 곡면에 대한 애니메이션을 표시합니다.
범위는 -0.1 < u < 0.1과 0 < v < 1입니다. MeshDensity
를 9
로 줄여서 플로팅 속도를 높입니다.
syms s t h = fsurf(t.*sin(s), cos(s), sin(1./s), [-0.1 0.1 0 1]); h.MeshDensity = 9; for i=1:0.05:3 h.ZFunction = sin(i./s); drawnow end
곡면 플롯의 모양 개선하기
다음 함수에 대한 기호 표현식 f
를 만듭니다.
표현식 f
를 곡면으로 플로팅합니다. fsurf
에서 반환된 핸들의 속성, 조명 속성 및 colormap
을 사용하여 곡면 플롯의 모양을 개선합니다.
camlight
를 사용하여 조명을 만듭니다. brighten
을 사용하여 밝기를 증가시킵니다. EdgeColor
를 'none'
으로 설정하여 선을 제거합니다. AmbientStrength
를 사용하여 주변광을 증가시킵니다. 자세한 내용은 조명, 투명도, 음영 항목을 참조하십시오. 좌표축 상자를 설정합니다. 제목의 경우, latex
을 사용하여 f
를 LaTeX으로 변환합니다. 마지막으로, 'Interpreter'
를 'latex'
으로 설정하여 좌표축 눈금, 좌표축 레이블 및 제목의 모양을 개선합니다.
syms x y f = 3*(1-x)^2*exp(-(x^2)-(y+1)^2)... - 10*(x/5 - x^3 - y^5)*exp(-x^2-y^2)... - 1/3*exp(-(x+1)^2 - y^2); h = fsurf(f,[-3 3]); camlight(110,70) brighten(0.6) h.EdgeColor = 'none'; h.AmbientStrength = 0.4; a = gca; a.TickLabelInterpreter = 'latex'; a.Box = 'on'; a.BoxStyle = 'full'; xlabel('$x$','Interpreter','latex') ylabel('$y$','Interpreter','latex') zlabel('$z$','Interpreter','latex') title_latex = ['$' latex(f) '$']; title(title_latex,'Interpreter','latex')
유계 평면이 있는 곡면 플롯
하한은 평면, 상한은 평면인 원통 껍질을 플로팅합니다.
syms r t u fsurf(cos(t),sin(t),u*(cos(t)+2),[0 2*pi 0 1]) hold on;
평면 의 곡면 플롯을 추가합니다.
fsurf(r*cos(t),r*sin(t),r*cos(t)+2,[0 1 0 2*pi])
곡면 플롯에 회전과 평행 이동 적용하기
원환면의 곡면 플롯에 회전과 평행 이동을 적용합니다.
원환면은 다음과 같이 파라미터로 정의할 수 있습니다.
여기서,
는 편각이고 는 방위각입니다.
는 관의 반지름입니다.
은 관의 중심에서 원환면의 중심까지의 거리입니다.
와 의 값을 각각 1과 5로 정의합니다. fsurf
를 사용하여 원환면을 플로팅합니다.
syms theta phi a = 1; R = 4; x = (R + a*cos(theta))*cos(phi); y = (R + a*cos(theta))*sin(phi); z = a*sin(theta); fsurf(x,y,z,[0 2*pi 0 2*pi]) hold on
축을 중심으로 원환면에 회전을 적용합니다. 회전 행렬을 정의합니다. 원환면을 90도( 라디안) 회전합니다.
alpha = pi/2; Rx = [1 0 0; 0 cos(alpha) -sin(alpha); 0 sin(alpha) cos(alpha)]; r = [x; y; z]; r_90 = Rx*r;
축을 따라 원환면의 중심을 5만큼 이동합니다. 기존 그래프에 회전 및 평행 이동된 원환면의 두 번째 플롯을 추가합니다.
fsurf(r_90(1)+5,r_90(2),r_90(3))
axis([-5 10 -5 10 -5 5])
hold off
입력 인수
출력 인수
알고리즘
fsurf
는 f
의 기호 변수를 x
축에 할당한 다음 y
축에 할당하고 symvar
은 할당할 변수의 순서를 정합니다. 그러므로 변수와 축 이름이 대응되지 않을 수 있습니다. fsurf
가 대응되는 축에 x 또는 y를 할당하도록 강제하려면 플로팅할 기호 함수를 만든 다음 이 기호 함수를 fsurf
에 전달하십시오.
예를 들어, 다음 코드는 f(x,y) = sin(y)를 두 가지 방법으로 플로팅합니다. 첫 번째 방법에서는 파형이 y축에 대해 진동하도록 강제됩니다. 두 번째 방법에서는 y를 x축에 할당합니다. 이것이 기호 함수에 있는 첫 번째(유일한) 변수이기 때문입니다.
syms x y; f(x,y) = sin(y); figure; subplot(2,1,1) fsurf(f); subplot(2,1,2) fsurf(f(x,y)); % Or fsurf(sin(y));

버전 내역
R2016a에 개발됨