주요 콘텐츠

미분

이 예제에서는 Symbolic Math Toolbox™를 사용하여 도함수를 구하는 방법을 보여줍니다.

먼저 기호 표현식을 만듭니다.

syms x
f = sin(5*x);

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

Df = diff(f)
Df = 5cos(5x)

또 다른 예로, exp(x)를 사용하여 ex을 나타내는 또 하나의 표현식을 지정합니다.

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

표현식 g를 미분합니다.

y = diff(g)
y = excos(x)-exsin(x)

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

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

g의 2계 도함수를 계산하려면 diff(g,2)를 사용하십시오.

D2g = diff(g,2)
D2g = -2exsin(x)

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

D2g = diff(diff(g))
D2g = -2exsin(x)

이 예제에서 Symbolic Math Toolbox는 단순화된 답을 반환합니다. 그러나 답이 단순화되지 않는 경우도 있습니다. 그럴 경우 simplify 명령을 사용하면 됩니다. 이 예제의 다음 섹션에서는 답이 단순화되는 경우를 설명합니다.

상수를 미분하려면 먼저 상수를 기호 표현식으로 정의해야 합니다.

c = sym("5");
Dc = diff(c)
Dc = 0

5와 같은 상수에 직접 diff를 사용하는 경우 숫자가 기호 객체가 아니라 double 숫자형이므로 빈 배열이 결과로 반환됩니다.

Dc = diff(5)
Dc =

     []

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

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

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

diff를 사용하고 미분할 변수를 t로 지정하여 편도함수 f/t를 구합니다.

Df_t = diff(f,t)
Df_t = scos(st)

변수 s에 대해 f를 미분하려면 미분할 변수를 s로 지정하십시오.

Df_s = diff(f,s)
Df_s = tcos(st)

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

fvar = symvar(f,1)
fvar = t

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

D2f = diff(f,t,2)
D2f = -s2sin(st)

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

도함수에 대한 추가 예제

다른 표현식에서 diff 함수를 더 자세히 알아보기 위해 기호 변수 a, b, x, n, t, theta를 정의합니다.

syms a b x n t theta

다음 표에서는 여러 다른 표현식에 diff를 사용한 결과를 보여줍니다.

f

diff(f)

>> syms x n

>> f = x^n;

>> Df = diff(f)

Df =

n*x^(n - 1)

>> syms a b t

>> f = sin(a*t + b);

>> Df = diff(f)

Df =

a*cos(b + a*t)

>> syms theta

>> f = exp(i*theta);

>> Df = diff(f)

Df =

exp(theta*1i)*1i

z에 대해 제1종 베셀 함수 besselj(nu,z)를 미분할 수 있습니다.

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

νJbesseljν(z)z-Jbesseljν+1(z)

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

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

(cos(ax)sin(ax)-sin(ax)cos(ax))

x에 대해 A의 도함수를 구합니다.

DA = diff(A)
DA = 

(-asin(ax)acos(ax)-acos(ax)-asin(ax))

벡터 인수에 대해 벡터 함수의 미분을 수행할 수도 있습니다. 다음과 같이 주어진 경우 카테시안 좌표 (x,y,z)를 구면 좌표 (r,λ,φ)로 변환한다고 가정해 보겠습니다.

x=rcosλcosφ,

y=rcosλsinφ,

z=rsinλ.

여기서 λ는 고도 또는 위도에 해당하고 φ는 방위각 또는 경도를 나타냅니다.

A point in 3-D space can be represented in Cartesian coordinates (x,y,z) or spherical coordinates (r,lambda,phi)

이 변환의 야코비 행렬 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)-rcos(f)sin(l)-rcos(l)sin(f)cos(l)sin(f)-rsin(f)sin(l)rcos(f)cos(l)sin(l)rcos(l)0)

이 야코비 행렬의 행렬식을 구하고 결과를 단순화합니다.

detJ = simplify(det(J))
detJ = -r2cos(l)

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

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

수학 연산자

Symbolic Math Toolbox를 사용하는 명령

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])

참고 항목

| | | | | |

외부 웹사이트