Actividad, Análisis Numérico.

Mi nombre

Abril del 2022

Ejercicio 1

Selecciona y resuelve 3 de los siguientes ejercicios.

  1. Aproxima la menor raíz positiva de \(f(x)=x^3-3.23x^2-5.54x+9.84\) por medio de los métodos de bisección y Newton Raphson, compara los resultados.
## NULL
bisect(f_a,0,1.5)
## $root
## [1] 1.23
## 
## $f.root
## [1] 0
## 
## $iter
## [1] 53
## 
## $estim.prec
## [1] 2.220446e-16
newtonRaphson(f_a,1.5,df_a)
## $root
## [1] 1.23
## 
## $f.root
## [1] -1.131433e-10
## 
## $niter
## [1] 6
## 
## $estim.prec
## [1] 4.599362e-10

Para el método de biseccion se necesiraron 53 iteraciones y para Newton 6.

  1. Determina las dos raíces de \(f(x)=sen\, x+3\,cos\, x-2\) que pertenecen al intervalo \((-2,2)\), utilizando los métodos de bisección y de Newton Raphson, compara los resultados.
f_b <- function(x){sin(x)+3*cos(x)-2} #defino la funcion
df_b <-  function(x){(cos(x)-3*sin(x))}
x_b <- seq(0, 2, by=0.01)
y_b <- f_b(x_b)

graf_b <- ggplot()+
  geom_vline(xintercept = 0, linetype="dashed")+ #eje y
  geom_hline(yintercept = 0, linetype="dashed")+ #eje x
  #grafica
  geom_line(aes(x=x_b, y=y_b), color="cadetblue1", size=1)+
  geom_point(aes(x=1.207828,y=0), color="blue", size=5)
  #coord_fixed(ratio = 1)+ # misma escala en los ejes
  labs(x="x", y="f(x)", title="Método newton Raphson b")+
  theme_minimal()
## NULL
ggplotly(graf_b)
bisect(f_b,0,1.5)
## $root
## [1] 1.207828
## 
## $f.root
## [1] 0
## 
## $iter
## [1] 54
## 
## $estim.prec
## [1] 2.220446e-16
newtonRaphson(f_b,1.5,df_b)
## $root
## [1] 1.207828
## 
## $f.root
## [1] 0
## 
## $niter
## [1] 5
## 
## $estim.prec
## [1] 1.812987e-16

Para el método de biseccion se necesiraron 54 iteraciones y para Newton 5.

  1. El polinomio \(f(x)=x^3-1.2x^2-8.19x+13.23\) tiene una raíz de orden dos cercana a \(x=2\). Aproxima dicha raíz por medio del método de Newton Raphson. En este caso ¿por qué no se puede utilizar el método de bisección?
f_c <- function(x){x^3-1.2*x^2-8.19*x+13.23} #defino la funcion
df_c <-  function(x){3*x^2-2*1.2*x-8.19}
x_c <- seq(0, 4, by=0.01)
y_c <- f_c(x_c)

graf_c <- ggplot()+
  geom_vline(xintercept = 0, linetype="dashed")+ #eje y
  geom_hline(yintercept = 0, linetype="dashed")+ #eje x
  #grafica
  geom_line(aes(x=x_c, y=y_c), color="cadetblue1", size=1)+
  geom_point(aes(x=2.1,y=0), color="blue", size=2)
  #coord_fixed(ratio = 1)+ # misma escala en los ejes
  labs(x="x", y="f(x)", title="Método newton Raphson c")+
  theme_minimal()
## NULL
ggplotly(graf_c)
newton(f_c,2.5,df_c)
## $root
## [1] 2.1
## 
## $f.root
## [1] 0
## 
## $niter
## [1] 26
## 
## $estim.prec
## [1] 0

Y no se puede usar el metodo de la biseccion por una gran cantidad de iteracion con uun gran margen de error

  1. Determina las raíces (reales) de \(f(x)=x^4+2x^3-7x^2+3\)

  2. Aproxima la raíces de \(f(x)=sen\, x-0.1x\)

Ejercicio 2

Encuentra un punto fijo de la función \(f(x)=sen\,x-0.1x+1\).

it_pf<- function(g, q0, pr=1e-5, N=100){
  cond <- 1
  it <- 1
  q <- q0
  while(cond==1){
    if(it<=N){
      q[it+1] = g(q[it]) # iteración de la función 
      pr_it <- abs(q[it+1]-q[it]) # precisión en la iteración 
       if(pr_it<pr){
          resultados <- list(sucesion=q, precision=pr_it, iteraciones=it)
          return(resultados)
          cond <- 0
          }#final del segundo if
        else{it <- it+1}
    }#final del primer if
    else{
      print("Se alcanzo el maximo de iteraciones")
      cond <- 0
    }#fin del else
  }#final del while
}# final de la función
f_2 <- function(x){(sin(x)/0.1)+(1)/(0.1)} #defino la funcion
f_x <-  function(x){x}

x_2 <- seq(0, 10, by=0.01)
y_2 <- f_2(x_2)
y_x <- f_x(x_2)

graf_2 <- ggplot()+
  geom_vline(xintercept = 0, linetype="dashed")+ #eje y
  geom_hline(yintercept = 0, linetype="dashed")+ #eje x
  #grafica
  geom_line(aes(x=x_2, y=y_2), color="cadetblue1", size=1)+
  geom_line(aes(x=x_2, y=y_x), color="blue", size=1)+
  geom_point(aes(x=3.8,y=3.8), color="blue", size=5)
  #coord_fixed(ratio=1)+ # misma escala en los ejes
  labs(x="x", y="f(x)", title="Punto fijo")+
  theme_minimal()
## NULL
ggplotly(graf_2)
it_pf(f_2, 3.8, 3.5, 10000000)
## $sucesion
## [1] 3.800000 3.881421
## 
## $precision
## [1] 0.08142109
## 
## $iteraciones
## [1] 1

Ejercicio 3

Resuelve el siguiente sistema de ecuaciones no lineal:

\[\begin{eqnarray} -2x^3+3y^2+42&=&0\\ 5x^2+3y^3-69&=&0 \end{eqnarray}\]

g <- function(y)((((3*y^2+42)/2)^2)-((3*y^3-69)/(-5))^3)
y <- newtonRaphson(g,1)$root
x <- sqrt((3*y^3-69)/(-5))
x
## [1] 3
y
## [1] 2

Ejercicio 4

Descarga el conjunto de datos de algún indicador económico (https://www.inegi.org.mx/app/tablero/) y realiza la respectiva gráfica. Posteriormente, selecciona un periodo (por ejemplo un año) y ajusta los datos por medio de un polinomio interpolante y por spline cúbico. Comenta los resultados obtenidos.

ipc <- read.xlsx("IPC.xlsx") %>% as_tibble()
ipc$Periodo <- ym(ipc$Periodo) 

graf_ipc<- ggplot(ipc)+
  geom_line(aes(Periodo,Indice_de_precios), color="goldenrod")+
  scale_x_date(breaks = "2 years", date_labels = "%Y")+
  theme_bw()
ggplotly(graf_ipc)
ipc_2001 <- ipc %>% filter(year(Periodo)==2001)
ipc_2001 <- ipc_2001 %>% mutate(Mes=month(Periodo))

poli_ipc <- as.function(poly.calc(ipc_2001$Mes,ipc_2001$Indice_de_precios))
sec_mes <- seq(1,12,0.01)
val_ipc_pol <- (poli_ipc(sec_mes))
#val_ipc_spline <- cubicspline(ipc_2001$Mes, ipc, sec_mes)

graf_ipc_2001 <- ggplot()+
   geom_line(data=ipc_2001, aes(Mes, Indice_de_precios), color="firebrick")+
   geom_point(data=ipc_2001, aes(Mes, Indice_de_precios), color="blue", size=2.5)+
   geom_line(aes(sec_mes, val_ipc_pol), color="pink", size=2)+
   #geom_line(aes(sec_mes, val_ipc_spline), color="pink")+
   theme_bw()

ggplotly(graf_ipc_2001)