Main Content

이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

미분

Symbolic Math Toolbox™를 사용하여 미분하는 방법을 보려면 먼저 기호 표현식을 만드십시오.

syms x
f = sin(5*x);

다음 명령은

diff(f)

x에 대해 f를 미분합니다.

ans =
5*cos(5*x)

또다른 예제를 살펴보겠습니다.

g = exp(x)*cos(x);

여기서 exp(x)ex을 나타냅니다. g를 미분해보겠습니다.

y = diff(g)
y =
exp(x)*cos(x) - exp(x)*sin(x)

주어진 x 값에 대한 g의 도함수를 구하려면 subs를 사용하여 x를 주어진 값으로 대체하고 vpa를 사용하여 숫자형 값을 반환하십시오. x = 2에서 g의 도함수를 구합니다.

vpa(subs(y,x,2))
ans =
-9.7937820180676088383807818261614

g의 2계 도함수를 계산하려면 다음을 입력하십시오.

diff(g,2)
ans =
-2*exp(x)*sin(x)

두 번 미분하면 동일한 결과를 얻을 수 있습니다.

diff(diff(g))
ans =
-2*exp(x)*sin(x)

이 예제에서는 MATLAB®에서 자동으로 답을 단순화합니다. 그러나 MATLAB에서 답을 단순화하지 않을 수도 있습니다. 이 경우 simplify 명령을 사용하면 됩니다. 이러한 단순화의 예제는 추가 예제 항목을 참조하십시오.

상수를 미분하려면 먼저 상수를 기호 표현식으로 정의해야 합니다. 예를 들어, 다음을 입력하면

c = sym('5');
diff(c)

다음 결과가 반환됩니다.

ans =
0

기호 표현식을 사용하지 않고 다음을 입력하면

diff(5)

MATLAB에서 다음이 반환됩니다.

ans =
     []

그 이유는 5가 기호 표현식이 아니기 때문입니다.

여러 변수가 있는 표현식의 도함수

둘 이상의 기호 변수를 포함하는 표현식을 미분하려면 어떤 변수에 대해 미분할지를 지정하십시오. 그런 다음 diff 명령으로 해당 변수에 대한 표현식의 편도함수를 계산합니다. 예를 들어, 다음과 같은 기호 표현식이 있다고 가정해 보겠습니다.

syms s t
f = sin(s*t);

다음 명령을 실행하면

diff(f,t)

편도함수 f/t가 계산됩니다. 결과는 다음과 같습니다.

ans = 
s*cos(s*t)

변수 s에 대해 f를 미분하려면 다음을 입력하십시오.

diff(f,s)

이 경우 다음 값이 반환됩니다.

ans =
t*cos(s*t)

어떤 변수에 대해 미분할지 지정하지 않으면 MATLAB에서 디폴트 변수를 선택합니다. 기본적으로 디폴트 변수는 알파벳상에서 x에 가장 가까운 문자입니다. Find a Default Symbolic Variable에서 전체 규칙을 참조하십시오. 위의 예제에서 diff(f)t에 대해 f의 도함수를 구합니다. 이는 문자 t가 문자s보다 알파벳상에서 x에 더 가깝기 때문입니다. 어떤 변수에 대해 MATLAB이 미분하는지를 파악하려면 symvar을 사용하십시오.

symvar(f, 1)
ans = 
t

t에 대한 f의 2계 도함수를 계산합니다.

diff(f, t, 2)

이 명령은 다음 결과를 반환합니다.

ans =
-s^2*sin(s*t)

t는 디폴트 변수이므로 diff(f, 2)는 동일한 답을 반환합니다.

추가 예제

diff 명령에 대해 더 자세히 알아보려면 MATLAB 작업 공간에서 다음을 입력하여 a, b, x, n, ttheta를 정의하십시오.

syms a b x n t theta

다음 표에서는 diff(f)를 입력한 결과를 보여줍니다.

f

diff(f)

syms x n
f = x^n;
diff(f)
ans =
n*x^(n - 1)
syms a b t
f = sin(a*t + b);
diff(f)
ans =
a*cos(b + a*t)
syms theta
f = exp(i*theta);
diff(f)
ans =
exp(theta*1i)*1i

z에 대해 제1종 베셀 함수 besselj(nu,z)를 미분하려면 다음을 입력하십시오.

syms nu z
b = besselj(nu,z);
db = diff(b)

이 경우 다음 값이 반환됩니다.

db =
(nu*besselj(nu, z))/z - besselj(nu + 1, z)

diff 함수는 기호 행렬을 입력값으로 받을 수도 있습니다. 이 경우, 미분은 요소별로 수행됩니다. 다음 예제를 보겠습니다.

syms a x
A = [cos(a*x),sin(a*x);-sin(a*x),cos(a*x)]

이 경우 다음 값이 반환됩니다.

A =
[  cos(a*x), sin(a*x)]
[ -sin(a*x), cos(a*x)]

다음 명령을 실행하면

diff(A)

다음 결과가 반환됩니다.

ans =
[ -a*sin(a*x),  a*cos(a*x)]
[ -a*cos(a*x), -a*sin(a*x)]

벡터 인수에 대해 벡터 함수의 미분을 수행할 수도 있습니다. x=rcosλcosφ, y=rcosλsinϕz=rsinλ로 놓고 유클리드 좌표 (x, y, z)를 구면 좌표 (r,λ,φ)로 변환한다고 가정해 보겠습니다. λ는 고도 또는 위도에 해당하고 φ는 방위각 또는 경도를 나타냅니다.

이 변환의 야코비 행렬 J를 계산하려면 jacobian 함수를 사용하십시오. J의 수학 표기법은 다음과 같습니다.

J=(x,y,z)(r,λ,φ).

툴박스에서 사용되는 구문에 맞게 λ에는 l을, φ에는 f를 사용합니다. 다음 명령을 실행하면

syms r l f
x = r*cos(l)*cos(f);
y = r*cos(l)*sin(f);
z = r*sin(l);
J = jacobian([x; y; z], [r l f])

다음 야코비 행렬이 반환됩니다.

J =
[ cos(f)*cos(l), -r*cos(f)*sin(l), -r*cos(l)*sin(f)]
[ cos(l)*sin(f), -r*sin(f)*sin(l),  r*cos(f)*cos(l)]
[        sin(l),         r*cos(l),                0]

또한 다음 명령을 실행하면

detJ = simplify(det(J))

다음 결과가 반환됩니다.

detJ = 
-r^2*cos(l)

jacobian 함수의 인수는 열 벡터 또는 행 벡터가 될 수 있습니다. 또한 야코비 행렬의 행렬식은 다소 복잡한 삼각 함수 표현식이기 때문에 simplify를 사용하여 삼각 함수 대입 및 축약(단순화)을 수행할 수 있습니다.

다음 표에는 diffjacobian이 간단히 요약되어 있습니다.

수학 연산자

MATLAB 명령

dfdx

diff(f) 또는 diff(f, x)

dfda

diff(f, a)

d2fdb2

diff(f, b, 2)

J=(r,t)(u,v)

J = jacobian([r; t],[u; v])