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)
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
Implementar una función newton1
que tome:
Devuelve una solución aproximada calculada según el método de Newton-Raphson.
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
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
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))
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
Implementar este algoritmo en la función siguiente (se pide al usuario ingresar la función f
, ver práctico de la semana pasada):