Practico 4: raices de ecuaciones

Newton-Raphson

Idea

Una de las formas mas utilizadas para encontrar raices es la formula de Newton-Raphson. Si el valor inicial para la raíz es xi, entonces se puede trazar una tangente desde el punto [xi, f(xi)] de la curva. Por lo común el punto donde esta tangente cruza al eje x representa una aproximación mejorada de la raíz.


xx + 1 = xi − f(xi)/f′(xi)

Pseudocódigo

Entradas: p0, tol, N0
  i = 1
  while i <= N0
    p = p0 - f(p)/f'(p0)

    if |p - p0| < tol
      print p
      stop
    end if

   i = i+1
   p0=p
end while

print "el metodo fracaso despues de N0 iteraciones"
stop

Implementación

Implementar una función newton1 que tome:

function [p0,y0,err] = newton(p0,delta,nmax)

Devuelve una solución aproximada calculada según el método de Newton-Raphson.

Ejemplos

  1. Función f(x) = ex − 1/x

    Derivada f′(x) = ex + 1/x2

    Aproximación inicial: 1

    Resultado aprox. después de 5 iteraciones : 0.56714329

  2. Función f(x) = cos(x) − x

    Derivada: f′(x) =  − sin(x) − 1

    Aproximación inicial: π/4

    Resultado aprox. después de 5 iteraciones : 0.73908513

Método de la secante

Idea

El método de la secante es un método que permite evaluar las raices de funciones cuya derivada es difícil de calcular. En dichos casos, la derivada se puede aproximar mediante una diferencia nita dividida hacia atrás. Y se obtiene de este modo la siguiente fórmula iterativa.


xi + 1 = xi − (f(xi)(xi − 1 − xi))/(f(xi − 1) − f(xi))

Pseudocódigo

Entradas: xo, x1,ea, er, iteraciones

if f(xo) == 0
  print "xo es raiz"
else
  c=x1-(f(x1)*(x1-xo))/((f(x1))-f(xo))
  error1 = ea + 1
  error2 = er + 1
  iter = 1;

  while f(c)!=0 and error1 > ea and error2 > er and iter < iteraciones
    xo = x1
    x1 = c
    c=x1-(f(x1)*(x1-xo))/((f(x1))-f(xo))
    error1 = abs(c - xo)
    error2 = abs(c - xo)/c
    iter = iter + 1
  end while

  print "Iteraciones Raiz error relativo error absoluto A1 A2"
end if

if f(c)!=0
  print "Raiz exacta: c"
else if error1 > ea
  print "Raiz con error admitido: c"
else if error2>er
  print "Raiz con error relativo admitido: c"
else
  print "Pocas iteraciones, raiz parcial c"
end if
stop

Implementación

Implementar este algoritmo en la función siguiente (se pide al usuario ingresar la función f, ver práctico de la semana pasada):

function [p1,y1] = secant(p0,p1,ea,er,nmax)

Documentación útil