R에서 적분과정 시뮬레이션 및 integrate() 함수 알아보기
내가 고등학교 이과생으로써 지낸 2학년 기억을 돌이켜 보면 적분의 방법은 이렇게 배웠던 것 같다.
넓이계산이 용이한 사각형을 함수와 x축 사이에 강제로 끼워 맞춤으로써 넓이를 근사시키는 과정을 취하였고,
특히 x축 기준 사각형을 등간격으로 잘게잘게 쪼개는 과정을 무한대로 취함으로써 적분값을 완벽히 근사시키는 법으로 적분값을 구한다 라고 말이다.
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개의 기본도형으로 나누어 끼워맞춘 후 넓이를 구한것을 \(S_n\) 이라 할 때
기본도형을 더 작은단위로 하여 \(n\) 을 극한으로 보냄으로써 넓이를 근사시키는 것을 구분구적법이라 한다.
즉 구분구적법은 \(\lim_{n \rightarrow \infty} S_n\) 을 계산하는 과정이다.
컴퓨터는 미분이든 적분이든 사람이 손으로 풀듯이 드라마틱하게 계산할 수 있는 능력이 없을것이다.
구분구적법에 기반한 프로그래밍적인 계산을 통해 적분값을 계산하게 될 것인데
R에서는 intergrate() 함수를 이용하여 적분값을 계산할 수 있다.
integrate(fun, 0, 5)## 87.08333 with absolute error < 9.7e-13
구분구적법은 기본도형을 최대한 잘게 쪼개는 과정이 필요한데
이를 무한히 반복하는것을 컴퓨터에게 시킨다면
stop 조건이 없을 경우 멈추지 않을것이다.
그렇다고 n을 무한으로 보내지 못하고 중간에 stop 하게 되면 적분값의 오차는 반드시 생길수 밖에 없을것이다.
추정컨데 integrate() 함수를 실행시키고 출력되는 “absolute error” 문구가 출력된 이유가 이것때문일 것이라 생각된다.
integrate() 함수 사용방법은 간편하다.
계산을 하고싶은 함수를 첫번째 인자에 넘겨주고,
폐구간에 대한 정보를 lower, upper 인자에 넘겨주기만 하면 적분값을 계산해 준다.