Main Content

Symbolic Math Toolbox를 사용한 해석적 플로팅

Symbolic Math Toolbox™는 숫자 데이터를 명시적으로 생성하지 않고도 수학 표현식의 해석적 플로팅을 제공합니다. 이러한 플롯은 2차원 또는 3차원의 선, 곡선, 등고선, 곡면 또는 메시일 수 있습니다.

다음 예제에서는 기호 함수, 기호 표현식 및 기호 방정식을 입력값으로 받는 다음과 같은 그래픽스 함수를 사용합니다.

  • fplot

  • fimplicit

  • fcontour

  • fplot3

  • fsurf

  • fmesh

  • fimplicit3

fplot을 사용하여 양함수 y=f(x) 플로팅하기

함수 sin(exp(x))를 플로팅합니다.

syms x
fplot(sin(exp(x)))

삼각 함수 sin(x), cos(x)tan(x)를 동시에 플로팅합니다.

fplot([sin(x),cos(x),tan(x)])

a의 여러 값에 대해 y=f(x,a)로 정의된 함수 플로팅하기

a=1,2, 4에 대해 함수 sin(exp(x/a))를 플로팅합니다.

syms x a
expr = sin(exp(x/a));
fplot(subs(expr,a,[1,2,4]))
legend show

함수의 도함수와 적분 플로팅하기

함수 f(x)=x(1+x)+2, 그 도함수 df(x)/dx 및 적분 f(x)dx를 플로팅합니다.

syms f(x)
f(x) = x*(1 + x) + 2
f(x) = xx+1+2
f_diff = diff(f(x),x)
f_diff = 2x+1
f_int = int(f(x),x)
f_int = 

x2x2+3x+126

fplot([f,f_diff,f_int])
legend({'$f(x)$','$df(x)/dx$','$\int f(x)dx$'},'Interpreter','latex','FontSize',12)

a를 가로 축으로 하여 함수 y=g(x0,a) 플로팅하기

미분 방정식 dg(x,a)/dx=0을 풀어 함수 g(x,a)를 최소화하는 x0을 구합니다.

syms g(x,a);
assume(a>0);
g(x,a) = a*x*(a + x) + 2*sqrt(a)
g(x, a) = 2a+axa+x
x0 = solve(diff(g,x),x)
x0 = 

-a2

a가 0부터 5까지일 때 g(x0,a)의 최소값을 플로팅합니다.

fplot(g(x0,a),[0 5])
xlabel('a')
title('Minimum Value of $g(x_0,a)$ Depending on $a$','interpreter','latex')

fimplicit를 사용하여 음함수 f(x,y)=c 플로팅하기

반지름 r이 1부터 10까지의 정수일 때 x2+y2=r2로 정의된 원을 플로팅합니다.

syms x y
r = 1:10;
fimplicit(x^2 + y^2 == r.^2,[-10 10])
axis square;

fcontour를 사용하여 함수 f(x,y)의 등고선 플로팅하기

등고선 레벨이 –6부터 6까지일 때 함수 f(x,y)=x3-4x-y2의 등고선을 플로팅합니다.

syms x y f(x,y)
f(x,y) = x^3 - 4*x - y^2;
fcontour(f,[-3 3 -4 4],'LevelList',-6:6);
colorbar
title 'Contour of Some Elliptic Curves'

스플라인 보간을 사용하여 해석 함수와 그 근삿값 플로팅하기

해석 함수 f(x)=xexp(-x)sin(5x)-2를 플로팅합니다.

syms f(x)
f(x) = x*exp(-x)*sin(5*x) -2;
fplot(f,[0,3])

해석 함수에서 몇 개의 데이터 점을 생성합니다.

xs = 0:1/3:3;
ys = double(subs(f,xs));

데이터 점과 해석 함수를 근사하는 스플라인 보간을 플로팅합니다.

hold on
plot(xs,ys,'*k','DisplayName','Data Points')
fplot(@(x) spline(xs,ys,x),[0 3],'DisplayName','Spline interpolant')
grid on
legend show
hold off

함수의 테일러 근사 플로팅하기

x=0 근처에서 5차수 및 7차수까지 cos(x)의 테일러 전개를 구합니다.

syms x
t5 = taylor(cos(x),x,'Order',5)
t5 = 

x424-x22+1

t7 = taylor(cos(x),x,'Order',7)
t7 = 

-x6720+x424-x22+1

cos(x) 및 그 테일러 근사를 플로팅합니다.

fplot(cos(x))
hold on;
fplot([t5 t7],'--')
axis([-4 4 -1.5 1.5])
title('Taylor Series Approximations of cos(x) up to 5th and 7th Order')
legend show
hold off;

구형파의 푸리에 급수 근사 플로팅하기

주기 2π 및 진폭 π/4인 구형파는 푸리에 급수 전개로 근사할 수 있습니다.

sin(t)+13sin(3t)+15sin(5t)+....

주기 2π 및 진폭 π/4인 구형파를 플로팅합니다.

syms t y(t)
y(t) = piecewise(0 < mod(t,2*pi) <= pi, pi/4, pi < mod(t,2*pi) <= 2*pi, -pi/4);
fplot(y)

구형파의 푸리에 급수 근사를 플로팅합니다.

hold on;
n = 6;
yFourier = cumsum(sin((1:2:2*n-1)*t)./(1:2:2*n-1));
fplot(yFourier,'LineWidth',1)
hold off

푸리에 급수 근사는 비약 불연속(jump discontinuity)에서 오버슈트되며 근사에 항을 더 많이 더해가도 "링잉 현상"이 사라지지 않습니다. 이 동작을 깁스 현상이라고도 합니다.

fplot3을 사용하여 파라미터 곡선 (x(t),y(t),z(t)) 플로팅하기

t가 –10부터 10까지일 때 (sin(t),cos(t),t/4)로 정의된 나선을 플로팅합니다.

syms t
fplot3(sin(t),cos(t),t/4,[-10 10],'LineWidth',2)
view([-45 45])

fsurf를 사용하여 z=f(x,y)로 정의된 곡면 플로팅하기

log(x)+exp(y)로 정의된 곡면을 플로팅합니다. (숫자 데이터를 생성하지 않은 채) fsurf를 사용하여 그리는 해석적 플로팅은 x=0 근처에서 곡선 영역과 점근적 영역을 보여줍니다.

syms x y
fsurf(log(x) + exp(y),[0 2 -1 3])
xlabel('x')

fsurf를 사용하여 다변량 곡면 (x(u,v),y(u,v),z(u,v)) 플로팅하기

다음과 같이 정의한 다변량 곡면을 플로팅합니다.

x(u,v)=u

y(u,v)=f(u)sin(v)

z(u,v)=f(u)cos(v)

여기서, f(u)=exp(-u2/3)sin(u)+3/2입니다.

u의 플롯 구간을 –5~5로 설정하고 v의 플롯 구간을 0~2π로 설정합니다.

syms f(u) x(u,v) y(u,v) z(u,v)
f(u) = sin(u)*exp(-u^2/3)+1.5;
x(u,v) = u;
y(u,v) = f(u)*sin(v);
z(u,v) = f(u)*cos(v);
fsurf(x,y,z,[-5 5 0 2*pi])

fmesh를 사용하여 다변량 곡면 (x(s,t),y(s,t),z(s,t)) 플로팅하기

다음과 같이 정의한 다변량 곡면을 플로팅합니다.

x=rcos(s)sin(t)

y=rsin(s)sin(t)

z=rcos(t)

여기서, r=8+sin(7s+5t)입니다. fmesh를 사용하여 플로팅된 곡면을 메시로 표시합니다. s의 플롯 구간을 0~2π로 설정하고 t의 플롯 구간을 0~π로 설정합니다.

syms s t
r = 8 + sin(7*s + 5*t);
x = r*cos(s)*sin(t);
y = r*sin(s)*sin(t);
z = r*cos(t);
fmesh(x,y,z,[0 2*pi 0 pi],'Linewidth',2)
axis equal

fimplicit3을 사용하여 음함수 곡면 f(x,y,z)=c 플로팅하기

음함수 곡면 1/x2-1/y2+1/z2=0을 플로팅합니다.

syms x y z
f = 1/x^2 - 1/y^2 + 1/z^2;
fimplicit3(f)

곡면의 등고선과 기울기 플로팅하기

fsurf를 사용하여 곡면 sin(x)+sin(y)-(x2+y2)/20을 플로팅합니다. 'ShowContours''on'으로 설정하면 동일한 그래프에 등고선을 표시할 수 있습니다.

syms x y
f = sin(x)+sin(y)-(x^2+y^2)/20
f = 

sin(x)+sin(y)-x220-y220

fsurf(f,'ShowContours','on')
view(-19,56)

다음으로, 더 세밀한 등고선을 사용하여 별도의 그래프에 등고선을 플로팅합니다.

fcontour(f,[-5 5 -5 5],'LevelStep',0.1,'Fill','on')
colorbar

곡면의 기울기를 구합니다. meshgrid를 사용하여 2차원 그리드를 만들고 그리드 좌표를 대입하여 기울기를 수치적으로 계산합니다. quiver를 사용하여 기울기를 표시합니다.

hold on
Fgrad = gradient(f,[x,y])
Fgrad = 

(cos(x)-x10cos(y)-y10)

[xgrid,ygrid] = meshgrid(-5:5,-5:5);
Fx = subs(Fgrad(1),{x,y},{xgrid,ygrid});
Fy = subs(Fgrad(2),{x,y},{xgrid,ygrid});
quiver(xgrid,ygrid,Fx,Fy,'k')
hold off

참고 항목

함수