치환미분
결합함수의 미분을 계산하기 위해 사용할 수 있는 치환방법을 소개했습니다. 이것을 좀더 일반화하여 여러 형태에 사용되는 치환미분을 살펴봅니다.
다음 함수는 거듭제곱 형태로서 연쇄법칙을 적용하여 미분할 수 있습니다.
미분 계산을 위해서는 함수를 최대한 간단하게 정리하는 것이 유리합니다. 위 함수에서
위와 같이 치환에 의한 함수의 미분의 과정은 다음과 같습니다.
위 과정의 1과 2 단계는 치환 과정이며 3과 4 단계는 각각 치환된 함수를 미분한 것입니다. 최종 결과인 5 단계에서는 3과 4 단계의 결과들을 곱하고 치환 함수를 원래의 함수로 환원시킨 것입니다. 위의 5 단계를 계산하면 다음과 같습니다.
위의 모든 과정을 코드화하면 다음과 같습니다.
a, u, x=symbols('a, u, x') u1=x**2+a**2 y=u**(Rational('3/2')) dydu=diff(y, u) #dy/du dydu
#치환 dudx=diff(u1, x) dudx #du/dx
dydx=dydu*dudx dydx
#환원 dydx.subs(u, u1)
위 과정을 몇 가지 예들에 적용해 봅니다.
예 1)
a, u, x=symbols('a, u, x') u1=x+a y=u**(Rational('1/2')) dydx=y.diff(u)*u1.diff(x) dydx
dydx.subs(u, u1)
예 2)
a, u, x=symbols('a, u, x') u1=a+x**2 y=u**(Rational('-1/2')) dydx=y.diff(u)*u1.diff(x) dydx
dydx.subs(u, u1)
y1=1/sqrt(a+x**2) y1.diff(x)
예 3)
a, m, n, p, u, x=symbols('a, m, n, p, u, x') y=(m-n*x**(Rational('2/3'))+p/x**(Rational('4/3')))**a u1=m-n*x**(Rational('2/3'))+p/x**(Rational('4/3')) y1=u**a u1dx=u1.diff(x) u1dx
y1du=y1.diff(u) y1du
y1dx=y1du*u1dx y1dx.subs(u, u1)
dydx=y.diff(x) dydx
예 4)
다음 식을 미분합니다.
위 식은 분수 형태이지만 분자가 상수이고 분모가 거듭제곱 형태이므로 치환에 의한 연쇄법칙(결합함수의 미분 참조)을 적용할 수 있습니다.
a, u, x=symbols('a, u, x') y=1/sqrt(x**3-a**2) u1=x**3-a**2 y1=1/sqrt(u) u1dx=u1.diff(x) u1dx
y1du=y1.diff(u) y1du
y1dx=y1du*u1dx y1dx.subs(u, u1)
dydx=y.diff(x) dydx
미분, 적분의 모든 계산에 적용되는 하나의 통일된 방법은 없습니다. 각 식에 맞게 적절한 방법을 선택하는 것이 중요합니다. 위 예들은 치환할 수 있는 식을 가진 경우입니다. 그러나 구성된 식들이 여러 종류일 경우는 다른 접근이 필요합니다. 다음 예 5의 경우는 단일한 식으로 치환하여 전체 식이 간략화될 수 없는 구조이며 분수 형태입니다. 이러한 형태의 미분은 미분의 나눗셈 규칙(결합함수의 미분 참조)을 적용할 수 있습니다.
예 5)
다음 식의
x=symbols('x') y=sqrt(1-x)/sqrt(x+1) de=denom(y)#분모 nu=numer(y) #분자 dde=de.diff() dde
dnu=nu.diff() dnu
dy=(dnu*de-nu*dde)/de**2 #(1) simplify(dy)
위 코드의 dy의 미분 과정은 다음과 같습니다.
물론 원래 함수를 직접 미분하는 것에 의해 같은 결과가 반환되어야 합니다.
dy2=y.diff(x) simplify(dy2)
예 6)
다음 식의
다음 식은 분수형태입니다. 분수 즉, 나눗셈은 곱셈으로 표시할 수 있습니다. 그러므로 예5와 같이 미분의 나눗셈 법칙을 적용할 수 있지만 곱의 법칙 역시 적용할 수 있습니다.
위 식의
x=symbols('x') y=sqrt(x**3)/sqrt(1+x**2) de=denom(y)#분모 nu=numer(y) #분자 d_de=de.diff() d_de
d_nu=nu.diff() d_nu
dy=(d_nu*de-nu*d_de)/de**2 #(1) simplify(dy)
위 결과는 원 식에 대한 직접 미분과 같습니다.
dy_o=y.diff(x) simplify(dy_o)
위와 같이 미분의 나눗셈 규칙 대신 곱 규칙을 적용하여 계산해 봅니다.
dy_o=y.diff(x) y1=x**(Rational("3/2"))*(1+x**2)**(Rational("-1/2")) y1
u=x**(Rational("3/2")) v=(1+x**2)**(Rational("-1/2")) dy1=u.diff()*v+u*v.diff() simplify(dy1)
예 7)
다음 식의
함수 y는 거듭제곱 형태로 연쇄 규칙을 적용하여 미분 할수 있습니다.
위는 함수 y의 미분 계산 과정을 나타낸 것으로 식 (1)은 직접 미분이 어려운 경우이며 거듭제곱 형을 포함하므로 다시 연쇄 규칙을 적용하여 미분 하였습니다. 그 결과에서 식(2)의 미분에 연쇄 규칙을 반복하여 적용하면 최종 결과는 다음과 같습니다.
a, x=symbols('a, x') y=(x+sqrt(x**2+x+a))**3 dydx=diff(y, x) dydx
예 7과 같이 결과에 대한 연속적인 미분이 필요한 경우 결국 많은 미분 계수가 생성되며 최종적으로 이들을 연결하여야 합니다. 위 예의 미분 과정은 다음과 같이 간략히 나타낼 수 있습니다.
예 7)
v, x, z=symbols('v, x, z') z1=3*x**4 dzdx=z1.diff(x) dzdx
v1=7/z**2 dvdz=v1.diff(z) dvdz
y=sqrt(1+v) dydv=y.diff(v) dydv
다음은 예의 3개의 식들을 결합하여 미분한 것입니다.
eq=y.subs(v, v1).subs(z, z1) eq
diff(eq, x)
댓글
댓글 쓰기