기본 콘텐츠로 건너뛰기

[matplotlib] 등고선(Contour)

적분의 일반 규칙과 부정적분(Indefinite Integral)

내용

적분 규칙

적분의 일반 규칙

함수 y에 대한 미분은 dydx를 계산하는 것입니다. 많은 수학적 계산과 같이 미분 과정 역시 역산될 수 있습니다. 예를 들어 y=x4의 미분은 dydx=4x3이 되며 그 과정을 반대로 실행하면 원 함수인 y=x4이 되어야 합니다. 그러나 미분계수가 4x3이 되는 함수는 위에서 언급한 함수 외에 x4+C와 같이 상수를 첨가된 다양한 함수의 미분 결과일 수 있습니다. 상수는 미분의 결과에 영향을 주지 않기 때문입니다. 이러한 점을 적분에 고려하여 미분의 역과정인 적분 결과에 상수 C를 더해 줍니다.

dydx=xn1nxn1dx=xn+CC:

식 1과 같이 위의 관계에서 독립변수 x의 거듭제곱에 대한 미분과 적분의 일정한 관계가 성립됩니다.

적분일반규칙 (1)dydx=xnnxndx=1n+1xn+1+CC:,n1

적분 계산은 sympy의 integrate()함수를 적용합니다. 이 함수의 결과에는 상수가 고려되지 않습니다. 그러나 적분 결과로 대상인 함수에서의 상수의 존재 여부를 결정할 수 없기 때문에 상수가 존재한다고 간주해야 합니다. 그러므로 intergrate()함수에 의한 계산결과에 상수가 생략되어 있음을 주의해야 합니다.

import numpy as np 
from sympy import *
x, n=symbols("x, n")
y=x**n
inty=integrate(y, x)
inty
{xn+1n+1forn1log(x)otherwise

위 코드의 결과는 조건에 따라 다른 함수를 나타냅니다. 이러한 함수를 분기함수(Piecewise)라고 합니다.

미분과정에서 변수의 계수는 계산에 영향을 주지 않는 것과 마찬가지로 적분에서도 영향을 주지 않습니다. 다음 코드에서 변수를 정의할 때 n = -1을 피하기 위해 모든 변수가 양수인 조건을 설정하였습니다.

a, x, n=symbols("a, x, n", positive=True)
y=a*x**n
inty=integrate(y, x)
inty
axn+1n+1


dydx=4x2의 적분을 계산해 봅니다.

dy=4x2dx=43x3+C
x=symbols("x")
y=4*x**2
inty=integrate(y, x)
inty
4x33

예)
dydx=ax12의 적분?

dy=ax12dx=a13x13+C
a, x=symbols("a, x")
y=a*x**12
inty=integrate(y, x)
inty
ax1313

함수들의 합에 대한 적분

다음 두 함수의 합에 대한 적분은 미분과 같이 함수 각각을 구분하여 실행할 수 있습니다.

dydx=x2+x3dy=(x2+x3)dx=x2dx+x3dx13x3+14x4+C
a, x=symbols("a, x")
y=x**2+x**3
inty=integrate(y, x)
inty
x44+x33

함수의 상수항

함수에 포함된 상수항은 다음과 나타낼 수 있습니다.

y=ax+b=ax+bx0

그러므로 상수항 역시 다음과 같이 적분의 일반 규칙을 적용할 수 있습니다.

dydx=xn+bdy=(xn+b)dx=xndx+bdx=1n+1xn+1+bx+C
b, n, x=symbols("b, n, x", positive=True)
y=x**n+b
inty=integrate(y, x)
inty
bx+xn+1n+1

예)
  함수 24x11를 적분해 봅니다.

dydx=24x11y=2412x12=2x12
x=symbols("x")
y=24*x**11
inty=integrate(y, x)
inty
2x12

예)
(a+b)(x+1)dx?

위 식은 x에 관한 적분으로 a, b는 상수입니다. 그러므로 식은 (a+b)(x+1)dx와 같습니다.

dydx=(a+b)(x+1)y=(a+b)(x+1)dx=(a+b)x1dx+(a+b)1x0dx=(a+b)12x2+(a+b)11x1
a, b, x=symbols("a, b, x")
y=(a+b)*(x+1)
inty=integrate(y, x)
int
x2(a2+b2)+x(a+b)

예)
dudt=gt의 적분?

du=gt12dt=23gt32+C
g, t=symbols("g, t")
dudt=g*sqrt(t)
u=integrate(dudt, t)
u
$\quad \color{navy}{\frac{2 g t^{\frac{3}{2}}}{3}$

예)
dydx=x3x2+x의 적분?

dy=(x3x2+x)dx=x3dxx2dx+xdx=14x413x3+12x2+C
x=symbols("x")
y=x**3-x**2+x
inty=integrate(y, x)
inty
x44x33+x22

예)
9.75x2.25dx?

x=symbols("x")
y=9.75*x**2.25
inty=integrate(y, x)
inty
3.0x3.25

예)
(x+1)(x+2)dx?

(x2+3x+2)dx=x33+3x22+2x+C
x=symbols("x")
y=(x+1)*(x+2)
inty=integrate(y, x)
inty
x33+3x22+2x

위 예들은 적분의 일반 규칙에 의해 쉽게 계산될 수 있습니다. 그러나 dydx=ax의 경우는 그 규칙을 적용할 수 없습니다.

어떤 함수를 미분한 결과가 1x가 되는 경우는 그 함수가 상수인 경우에 해당합니다. 즉, 상수 a는 ax0이므로 이 함수의 미분계수는 a·0x01이 되므로 결과는 0입니다. 결과적으로 1xdx는 위의 규칙을 적용할 수 없습니다. 대신에 로그함수 y=logex의 미분인 dydx=1x를 역으로 적용할 수 있습니다. y=logexadydx=axdy=a1xdxy=alogex+C

특별한 함수의 적분

위 경우와 같이 적분은 미분의 반대 과정으로 일반적인 규칙의 적용이 어려운 경우는 미분에 의한 결과를 찾는 방법으로 적분을 실행할 수 있습니다. 이러한 방식으로 적용할 수 있는 몇 가지 적분 방법은 식 2와 같습니다.

특별한 함수의 적분공식 (2)1xdx=logex+C1x+adx=loge(x+a)+Cexdx=ex+Cexdx=ex+Csin(x)dx=cos(x)+Ccos(x)dx=sin(x)+C
a, x=symbols("a, x")
integrate(x**(-1))
log(x)
integrate(1/(x+a), x)
log(a+x)
integrate(exp(x), x)
ex
integrate(exp(-x), x)
ex
integrate(sin(x), x)
cos(x)
integrate(cos(x), x)
sin(x)

y=xlogexx의 미분은 다음과 같습니다.

dydx=logex+xx1=logex

그러므로 이 함수의 적분은 다음과 같이 나타낼 수 있습니다.

logexdx=x(logex1)+Clog10xdx=0.4343·x(logex1)+Caxdx=axlogea+C

sympy 모듈의 log(x, base)함수는 밑수(base)를 별도로 지정할 수 있지만 생략하면 기본값 e가 적용됩니다. 그러므로 log(x)는 자연로그를 의미합니다.

삼각함수의 적분

y=sin(ax)와 y=cos(ax)의 적분은 이 함수들의 미분 형태를 사용하여 식 3과 4와 같이 계산됩니다.

(3)y=sin(ax)=dydydx=a·cos(ax)dy=acos(ax)dx=sin(ax)cos(ax)dx=1asin(ax)+C (4)y=cos(ax)=dydydx=a·sin(ax)dy=asin(ax)dx=cos(ax)sin(ax)dx=1acos(ax)+C
a, x=symbols("a, x")
integrate(cos(a*x), x)
{sin(ax)afora0xotherwise
integrate(sin(a*x), x)
{cos(ax)afora00otherwise

삼각함수의 적분은 미분과 마찬가지로 삼각함수 공식을 적용하여 계산할 수 있습니다. 예를 들어 cos2(θ)은 식 5와 같이 변형할 수 있습니다.

(5)cos(θ+θ)=cos2(θ)sin2(θ)=cos2(θ)(1cos2(θ))=2cos2(θ)1cos2(θ)=12(cos(2θ)+1)

위 정리를 적용하여 함수 cos2(θ)의 적분을 실행할 수 있습니다.

cos2(θ)dθ=12(cos(2θ)+1)dθ=12(cos(2θ)dθ+1dθ)=sin(2θ)4+θ2+C
theta=symbols("theta")
y=cos(theta)**2
inty=integrate(y, theta)
inty
θ2+sin(θ)cos(θ)2

편적분

1개 이상의 독립변수를 가진 함수의 미분은 편미분을 실행합니다. 즉, 특정한 변수를 미분할 경우 다른 변수는 상수로 지정됩니다. 적분 역시 마찬가지 방법이 적용됩니다. 예를 들어 f(x,y)=x2+y2을 적분할 경우 식 6과 같이 표현됩니다.

(6)x2+y2dxdy

위 식에서 먼저 dx를 실행할 경우 변수 y는 상수로 고려되고 그 적분 결과를 y에 대해 적분을 실행됩니다. 물론 두 번째 과정에서 x는 상수로 고려됩니다.

1 단계(x2+y2)dx=13x3+y2x2 단계(13x3+y2x)dy=13x3y+13y3x

sympy의 integrate() 함수를 적용할 경우 적분할 변수를 순서적으로 지정함으로서 편적분을 실행할 수 있습니다. 다음은 먼저 x, 다음으로 y에 대해 적분하기 위한 코드입니다.

x, y=symbols("x, y")
f=x**2+y**2
intf=integrate(f, x, y)
intf
x3y3+xy33

표면과 고체의 면적을 다루는 과정에서 길이와 폭이 모두 변수이면 다음과 같이 편적분이 필요합니다.

udxdy

여기서 u는 각 지점에서 x와 y에 따라 달라지는 속성입니다. 이를 표면 적분이라고 합니다. 그것은 u·dx·dy와 같은 모든 요소의 값 (즉, 작은 직사각형 길이 dx 및 폭 dy에 대한 u의 값)이 전체 길이와 전체 폭에 대해 합산되어야 함을 나타냅니다.

3 차원의 경우도 비슷합니다. 크기가 dx, dy, dz인 작은 입방체의 부피가 각 변수에 관계된 함수 f(x,y,z)로 표현된다면, 전체의 부피는 적분에 의해 계산될 수 있습니다.

Volume=f(x,y,z)dxdydz

댓글

이 블로그의 인기 게시물

[Linear Algebra] 유사변환(Similarity transformation)

유사변환(Similarity transformation) n×n 차원의 정방 행렬 A, B 그리고 가역 행렬 P 사이에 식 1의 관계가 성립하면 행렬 A와 B는 유사행렬(similarity matrix)이 되며 행렬 A를 가역행렬 P와 B로 분해하는 것을 유사 변환(similarity transformation) 이라고 합니다. (1)A=PBP1P1AP=B 식 2는 식 1의 양변에 B의 고유값을 고려한 것입니다. (식 2)BλI=P1APλP1P=P1(APλP)=P1(AλI)P 식 2의 행렬식은 식 3과 같이 정리됩니다. det(BλI)=det(P1(APλP))=det(P1)det((AλI))det(P)=det(P1)det(P)det((AλI))=det(AλI)det(P1)det(P)=det(P1P)=det(I) 유사행렬의 특성 유사행렬인 두 정방행렬 A와 B는 'A ~ B' 와 같...

[sympy] Sympy객체의 표현을 위한 함수들

Sympy객체의 표현을 위한 함수들 General simplify(x): 식 x(sympy 객체)를 간단히 정리 합니다. import numpy as np from sympy import * x=symbols("x") a=sin(x)**2+cos(x)**2 a sin2(x)+cos2(x) simplify(a) 1 simplify(b) x3+x2x1x2+2x+1 simplify(b) x - 1 c=gamma(x)/gamma(x-2) c Γ(x)Γ(x2) simplify(c) (x2)(x1) 위의 예들 중 객체 c의 감마함수(gamma(x))는 확률분포 등 여러 부분에서 사용되는 표현식으로 다음과 같이 정의 됩니다. 감마함수는 음이 아닌 정수를 제외한 모든 수에서 정의됩니다. 식 1과 같이 자연수에서 감마함수는 factorial(!), 부동소수(양의 실수)인 경우 적분을 적용하여 계산합니다. (식 1)Γ(n)={(n1)!n:자연수0xn1exdxn:부동소수 x=symbols('x') gamma(x).subs(x,4) 6 factorial 계산은 math.factorial() 함수를 사용할 수 있습니다. import math math.factorial(3) 6 a=gamma(x).subs(x,4.5) a.evalf(3) 11.6 simpilfy() 함수의 알고리즘은 식에서 공통사항을 찾아 정리하...

sympy.solvers로 방정식해 구하기

sympy.solvers로 방정식해 구하기 대수 방정식을 해를 계산하기 위해 다음 함수를 사용합니다. sympy.solvers.solve(f, *symbols, **flags) f=0, 즉 동차방정식에 대해 지정한 변수의 해를 계산 f : 식 또는 함수 symbols: 식의 해를 계산하기 위한 변수, 변수가 하나인 경우는 생략가능(자동으로 인식) flags: 계산 또는 결과의 방식을 지정하기 위한 인수들 dict=True: {x:3, y:1}같이 사전형식, 기본값 = False set=True :{(x,3),(y,1)}같이 집합형식, 기본값 = False ratioal=True : 실수를 유리수로 반환, 기본값 = False positive=True: 해들 중에 양수만을 반환, 기본값 = False 예 x2=1의 해를 결정합니다. solve() 함수에 적용하기 위해서는 다음과 같이 식의 한쪽이 0이 되는 형태인 동차식으로 구성되어야 합니다. x21=0 import numpy as np from sympy import * x = symbols('x') solve(x**2-1, x) [-1, 1] 위 식은 계산 과정은 다음과 같습니다. x21=0(x+1)(x1)=0x=1or1x4=1의 해를 결정합니다. solve() 함수의 인수 set=True를 지정하였으므로 결과는 집합(set)형으로 반환됩니다. eq=x**4-1 solve(eq, set=True) ([x], {(-1,), (-I,), (1,), (I,)}) 위의 경우 I는 복소수입니다.즉 위 결과의 과정은 다음과 같습니다. x41=(x2+1)(x+1)(x1)=0x=±1,±1=±i,±1 실수...