Ejercicio 1

Aproximar la función \(e^x\) para \(x=5\), utilizando las series de Taylor, calcular el error absoluto y relativo de la aproximación.

1. Definir la función exponencial

\[ 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

2. Definir la aproximación en series de Taylor para los primeros 4 términos

\[ 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

3. Calcular el error absoluto y el error relativo

\[ 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

4. Gráficar los errores

# 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"
  )

5 . Graficar la convergencia de la serie

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")

Ejercicio 2

1. Definir la función

\[ f(x) = \frac{sen (x)}{x} \]

f_sen= function(x){
  resultado = (sin(x)) / x
  return(resultado)
}

2. Graficar la función

# 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)
)

3.Evaluar la funcion en el siguiente limite

\[ \lim_{x \to 0} \frac{sen (x)}{x} \]

f_sen(0)
## [1] NaN

4. Definir serie Taylor

\[ \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} \]

5. Desarrollar los sumandos para los primeros 4 terminos

\[ \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

6. Evaluar la funcion en los terminos

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
)