대학원 수업중 Taylor expension 이 왜 강력하고 자주 사용되는지 언급되었습니다.
교수님의 말씀을 들어보니 확실히 잘 쓰일수 밖에 없겠구나 라는 공감이 들었습니다.
이를 동기부여로.
Taylor expension 을 이용해 어떤 함수를 근사하는 것을 시각적으로 보고싶은 마음이 생겼습니다.
테일러 급수는 미분가능한 모든 함수가 다항식의 무한개 합으로 표현가능하다는 이론입니다.
무한개 합으로 표현은 할 수 있지만 보통 그러지 않고 어느선까지 표현하여 근사시키는것 또한 가능합니다.
\[f(x) = e^x\]
시뮬레이션에 사용될 함수는 위와같이 exponential 함수입니다.
\(x=0\) 근방을 기준(가운데)으로 하여 R에서 ploting 하면 다음과 같습니다.
plot(c(-3,3),c(0,20), type="n", xlab="x", ylab="exp(x)")
curve(exp, -3, 3, add=T, lwd=2, col="black")
0 이 근방에서 e^x 함수와 가까워 지기위한 테일러전개 함수는 다음과 같습니다.
\(T_{ f }(x)~ =~ \sum _{ r=0 }^{ \infty }{ \frac { f^{ (r) }(a) }{ r! } (x-a)^{ r } } \\ \\\\ f(x)~ =~ e^{ x }\\ a~ =~ 0\\ \\\\ e^{ x }~ =~ \frac { exp(0) }{ 0! } (x-0)^{ 0 }+\frac { exp^{ \prime }(0) }{ 1! } (x-0)^{ 1 }+\frac { exp^{ \prime \prime }(0) }{ 2! } (x-0)^{ 2 }+\frac { exp^{ \prime \prime \prime }(0) }{ 3! } (x-0)^{ 3 }+\cdots\)
여기서 맨 첫번째 우항을 이용해
\(e^{ x }~ \approx ~ \frac { exp(0) }{ 0! } (x-0)^{ 0 }\)
를 첫번째로 ploting 해보겠습니다.
plot(c(-3,3),c(0,20), type="n", xlab="x", ylab="exp(x)")
curve(exp, -3, 3, add=T, lwd=2, col="black")
function1 <- function(x) {exp(0)/factorial(0)*(x-0)^0}
curve(function1, -3, 3, add=T, col="red")
0값 근방에서는 잘 추정이 되었으나 나머지 부분은 명백히 잘못 추정합니다.
그럼 우항하나가 아닌 두항을 써보면 어떨까요?
\(e^{ x }~ \approx ~ \frac { exp(0) }{ 0! } (x-0)^{ 0 }+\frac { exp^{ \prime }(0) }{ 1! } (x-0)^{ 1 }\)
다음의 경우입니다.
plot(c(-3,3),c(0,20), type="n", xlab="x", ylab="exp(x)")
curve(exp, -3, 3, add=T, lwd=2, col="black")
function2 <- function(x) {
exp(0)/factorial(0)*(x-0)^0 +
exp(0)/factorial(1)*(x-0)^1
}
curve(function2, -3, 3, add=T, col="red")
역시 0값 근방에서는 추정하는데는 문제가 없습니다.
그런데 전보다 0근방에서 벗어나더라도 차이가 크지 않군요.
물론 0 에서 멀어질수록 차이는 나지만 우항한개를 쓴 경우보다 훨씬 개선되었음을 시각적으로 볼 수 있습니다.
더 늘려봅시다.
\(e^{ x }~ \approx ~ \frac { exp(0) }{ 0! } (x-0)^{ 0 }+\frac { exp^{ \prime }(0) }{ 1! } (x-0)^{ 1 }+\frac { exp^{ \prime \prime }(0) }{ 2! } (x-0)^{ 2 }\)
의 경우입니다.
plot(c(-3,3),c(0,20), type="n", xlab="x", ylab="exp(x)")
curve(exp, -3, 3, add=T, lwd=2, col="black")
function3 <- function(x) {
exp(0)/factorial(0)*(x-0)^0 +
exp(0)/factorial(1)*(x-0)^1 +
exp(0)/factorial(2)*(x-0)^2
}
curve(function3, -3, 3, add=T, col="red")
이제부터 뭔가 확 느껴지는군요..
다음은 이겁니다.
\(e^{ x }~ \approx ~ \frac { exp(0) }{ 0! } (x-0)^{ 0 }+\frac { exp^{ \prime }(0) }{ 1! } (x-0)^{ 1 }+\frac { exp^{ \prime \prime }(0) }{ 2! } (x-0)^{ 2 }+\frac { exp^{ \prime \prime \prime }(0) }{ 3! } (x-0)^{ 3 }\)
plot(c(-3,3),c(0,20), type="n", xlab="x", ylab="exp(x)")
curve(exp, -3, 3, add=T, lwd=2, col="black")
function4 <- function(x) {
exp(0)/factorial(0)*(x-0)^0 +
exp(0)/factorial(1)*(x-0)^1 +
exp(0)/factorial(2)*(x-0)^2 +
exp(0)/factorial(3)*(x-0)^3
}
curve(function4, -3, 3, add=T, col="red")
신기합니다.
exponential 함수가 어떠한 점을 근방으로 하여 이런한 다항식으로 근사가 가능하니 쓸모가 참으로 많을것 같습니다.
다음은 저의 시뮬레이션을 정리한 결과입니다.
plot(c(-3,3),c(0,20), type="n", xlab="x", ylab="exp(x)")
curve(exp, -3, 3, add=T, lwd=3, col="black")
color <- colorRampPalette(c("white", "red"))(5)
curve(function1, -3, 3, add=T, col=color[2])
curve(function2, -3, 3, add=T, col=color[3])
curve(function3, -3, 3, add=T, col=color[4])
curve(function4, -3, 3, add=T, col=color[5])
legend(-3, 20, legend=c(1,2,3,4), fill=color[2:5])
위의 예시는 테일러 근사에 exponential function 을 0근방에서 시뮬레이션 한 것입니다.
하지만 저 함수말고도 미분가능한 다양한 함수를 쓰든, 그리고 어떠한 근방에서 시뮬레이션을 하든지 이런식으로 테일러근사를 시킨다면 본 함수와 가까워지게 됩니다.