Lovetoken

저는 개발 취향을 가진 데이터 분석가 Jr. 입니다.

Navigation
 » Home
 » About Me
 » Github

R에서 구분구적법 적분과정 시뮬레이션 및 integrate() 함수 알아보기

06 Jun 2016 » R



내가 고등학교 이과생으로서 지낸 2학년 기억을 돌이켜 보면 적분의 방법은 이렇게 배웠던 것 같다.
넓이 계산이 쉬운 사각형을 함수와 x축 사이에 강제로 끼워 맞춤으로써 넓이를 근사시키는 과정을 밟았고,
특히 x축 기준 사각형을 등간격으로 잘게 잘게 쪼개는 과정을 무한대로 취함으로써 적분 값을 완벽히 근사시키는 법으로 구한다고 말이다.

library(ggplot2)

fun <- function(x) x^3 - 7*x^2 + 13*x + 12

fun_forarea <- function(x){
    res <- fun(x)
    res[ x<0 | x>5 ] <- NA
    return(res)
}

P <- ggplot(data.frame(x = c(-1, 6)), aes(x = x)) + 
    stat_function(fun = fun) + 
    stat_function(fun = fun_forarea, geom = "area", fill = "#3E5CFF", alpha = .2) + 
    geom_hline(yintercept = 0) + 
    theme_bw()

P




이러한 형태로 넓이를 구하기 힘든 곡선모형의 넓이를 구하기 위해
충분히 작은 n개의 기본도형으로 나누어 끼워 맞춘 후 넓이를 구한 것을 Sn 이라 할 때
기본도형을 더 작은 단위로 하여 n 을 극한으로 보냄으로써 넓이를 근사시키는 것을 구분구적법이라 한다.
즉 구분구적법은 limn → ∞Sn 을 계산하는 과정이다.

컴퓨터는 미분이든 적분이든 사람이 손으로 풀듯이 드라마틱하게 계산할 수 있는 능력이 없을 것이다.
구분구적법에 기반한 프로그래밍적인 계산을 통해 적분 값을 계산하게 될 것인데
R에서는 intergrate() 함수를 이용하여 적분 값을 계산할 수 있다.

integrate(fun, 0, 5)
## 87.08333 with absolute error < 9.7e-13

구분구적법은 기본도형을 최대한 잘게 쪼개는 과정이 필요한데
이를 무한히 반복하는 것을 컴퓨터에게 시킨다면
stop 조건이 없을 경우 멈추지 않을것이다.
그렇다고 n을 무한으로 보내지 못하고 중간에 stop 하게 되면 적분값의 오차는 반드시 생길수 밖에 없을것이다.
추정하건대 integrate() 함수를 실행시키고 출력되는 “absolute error” 문구가 출력된 이유가 이것 때문일 것이라 생각한다.

integrate() 함수 사용방법은 간편하다.
계산을 하고 싶은 함수를 첫 번째 인자에 넘겨주고,
폐구간에 대한 정보를 lower, upper 인자에 넘겨주기만 하면 적분 값을 계산해 준다.