Aproximar la función \(e^x\) para \(x=5\), utilizando las series de Taylor, calcular el error absoluto y relativo de la aproximación.
\[ f(x)=e^x \]
# Definir la funcion e^x
f_exp = function(x){
resultado = exp(x); return(resultado)
}
# Calcular el valor fe f con x=5
f_exp(5)
## [1] 148.4132
\[ e^x=\sum_{n=0}^{\infty}\frac{x^n}{n!}= 1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+ \cdots \]
# Definir la funcion para aproximar e^x
# se define la funcion utilizando 3 terminos
f_aprox_manual = function(x){
resultado= x^0/factorial(0) +
x^1/factorial(1) + x^2/factorial(2)+ x^3/factorial(3)
return(resultado)
}
f_aprox_manual(5)
## [1] 39.33333
# definimos otra funcion pero para N terminos
# para esto usamos el siguiente codigo para generar
# \sum_i=0^N = \frac{x^i}{i!}
N = 10
suma = 0
f_aprox = function(x,N){
for (i in 0:N){
suma =suma + x^i/factorial(i)
}
return(suma)
}
f_aprox(5,10)
## [1] 146.3806
\[ E_{abs}= |\text{aproximacion} - \text{exacto}| \]
# Ahora se definirá una función para calcular
e_abs = function(x,N){
error_absoluto = abs( f_aprox(x,N) - f_exp(x) )
return(error_absoluto)
}
print(e_abs(1,10))
## [1] 2.731266e-08
\[ E_{rel }= \frac{|\text{aproximacion} - \text{exacto}|}{\text{exacto}} \]
e_rel = function(x,N){
error_relativo = abs( f_aprox(x,N) - f_exp(x) )/f_exp(x)
return(error_relativo)
}
print(e_rel(1,10))
## [1] 1.004777e-08
# Gráficar el error
# Definir un vector de numero de terminos
v_terminos = 1:10
# Definir los errores obtenidos
w_errores = numeric(10)
# crear un for para obtener el valor del error absoluto
# para cada iteracion de 1:N
# Los ciclos for no llevan return
for (j in 1:10) {
w_errores[j] = e_abs(1, v_terminos[j])
}
w_errores
## [1] 7.182818e-01 2.182818e-01 5.161516e-02 9.948495e-03 1.615162e-03
## [6] 2.262729e-04 2.786021e-05 3.058618e-06 3.028859e-07 2.731266e-08
# Ahora gráficar los erroes obtenidos
plot(
v_terminos, w_errores,
type = "b",
pch = 21,
col = "blue",
bg = "blue",
xlab = "Numero de terminos",
ylab = "Error"
)
plot(0:N, sapply(0:N, function(n) f_aprox(5, n)),
type = "b", pch = 19, col = "blue",
main = expression(paste("Convergencia de la serie de Taylor de ", e^x, " para x = 5")),
xlab = "Número de términos",
ylab = "Aproximación acumulada"
)
abline(h = f_exp(5), col = "red", lty = 2)
legend("topleft",
legend = c("Suma parcial", "Valor exacto"),
col = c("blue", "red"), lty = c(1, 2), pch = c(19, NA), bty = "n")
\[ f(x) = \frac{sen (x)}{x} \]
f_sen= function(x){
resultado = (sin(x)) / x
return(resultado)
}
# definir un vector
N = -20:20
length(N);N
## [1] 41
## [1] -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2
## [20] -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
## [39] 18 19 20
v = numeric(41)
for (j in N) {
v[j] = f_sen(N[j])
}
# Ahora gráficar los erroes obtenidos
plot(N, v,
type = "b", # puntos y líneas
pch = 21, # símbolo rellenable (círculo)
col = "red", # color del borde
bg = "red", # color de relleno
ylim = c(-.5, 1)
)
\[ \lim_{x \to 0} \frac{sen (x)}{x} \]
f_sen(0)
## [1] NaN
\[ \begin{aligned} \lim_{x \to 0} \frac{sen (x)}{x}\\ \sin(x)&=\sum\limits_{i=0}^{N}(-1)^i\frac{x^{2i+1}}{(2i+1)!}\\ &= x - \frac{x^3}{3!}+\frac{x^5}{5}-\frac{x^7}{7!}+\cdots \end{aligned} \]
\[ \begin{aligned} \lim_{x \to 0} &=\frac{x - \frac{x^3}{3!}+\frac{x^5}{5}-\frac{x^6}{7!}+\cdots}{x}\\ \lim_{x \to 0} &= 1-\frac{x^2}{3!}+\frac{x^4}{5!}-\frac{x^6}{7!}= 1 \end{aligned} \]
terminos <- seq(-2, 2, 0.57)
length(terminos)
## [1] 8
valor= numeric(8)
terminos
## [1] -2.00 -1.43 -0.86 -0.29 0.28 0.85 1.42 1.99
for (j in terminos) {
valor[j] = f_sen(terminos[j])
}
plot(terminos, valor,
type = "b", # puntos y líneas
pch = 21, # símbolo rellenable (círculo)
col = "red", # color del borde
bg = "blue" # color de relleno
)